正確な文字列を含むディレクトリ内のすべてのファイルに拡張子を追加します。

正確な文字列を含むディレクトリ内のすべてのファイルに拡張子を追加します。

複数のレベルと多くのファイルを含む大きなディレクトリがあります。これらのファイルのすべてではありませんが、ほとんどはHTMLファイルですが、.html拡張子はありません(Windowsにコピーすると問題が発生します)。

すべてのHTMLファイルには次の内容があります。最初ワイヤー:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

.htmlコマンドのみを使用して、その文字列を含むすべてのファイルに拡張子をどのように追加できますか?

私はこれを見たことがあるだから質問はただし、文字列を含めるかどうかによって名前は変わりません。

ベストアンサー1

拡張子以外のすべての.htmlファイルに拡張子がまったくないと仮定すると、必要なタスクを実行する単純なbashスクリプトがあります。

find . -type f ! -iname "*.html" -a ! -iname "*.htm" | while IFS= read -r file; do
    head -1 "${file}" | if grep -q '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' ; then 
        mv "${file}" "${file}.html" 
    fi
done

スクリプトは次の操作を順番に実行します。

  1. .html現在のディレクトリとサブディレクトリで拡張子のないすべてのファイルを繰り返し検索します。
  2. 見つかったファイルの最初の行がユーザーが指定した文字列であることを確認します。
  3. 最初の行が一致すると、.htmlファイル名が拡張子を含むように変更されます。

おすすめ記事