Files

為包含確切字元串的目錄中的所有文件添加副檔名

  • March 19, 2017

我有一個包含多個級別和大量文件的大型目錄。這些文件中的大多數(但不是全部)是 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副檔名添加到包含此字元串的所有文件中?

我見過這個SO question,但它不會根據是否包含字元串來重命名。

假設所有非擴展.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副檔名。

引用自:https://unix.stackexchange.com/questions/352383