Добавить расширение ко всем файлам в каталоге, содержащем точную строку

У меня есть большой каталог с несколькими уровнями и тоннами файлов. Большинство (но не все) этих файлов являются файлами 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 , но он не переименовывается в зависимости от того, содержит ли строка строку.

2 Solutions collect form web for “Добавить расширение ко всем файлам в каталоге, содержащем точную строку”

Предполагая, что все файлы без расширения .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 .
 goldn='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' \ find . -type f \ ! -name '*.[hH][tT][mM]' \ ! -name '.*.[hH][tT][mM]' \ ! -name '*.[hH][tT][mM][lL]' \ ! -name '.*.[hH][tT][mM][lL]' \ -exec sh -c ' shift "$1" while case $# in 0 ) break;; esac do read l1 < $1 case $l1 in "$goldn" ) mv "$1" "$1.html";; esac shift done ' 2 1 {} + 
  • Невозможно создать файл + r
  • Почему chmod преуспеть в файле, когда пользователь не имеет права на запись в родительский каталог?
  • Как читать строки из переменной | удар
  • Каковы корневые разрешения для файла?
  • Преобразование текста в табличную форму
  • Измените владельца файла, который я могу записать в
  • Проверьте, есть ли файлы, соответствующие шаблону, чтобы выполнить скрипт
  • Как создать файл с пустым именем?
  • Один слот для сортировки и uniq двух выходов
  • Объединение пар файлов в цикле
  • Какие символы действительны для использования в именах файлов?
  • Linux и Unix - лучшая ОС в мире.