Bash-скрипт для поиска содержимого файла в каталоге и добавления значения

Bash-скрипт для поиска содержимого файла в каталоге и добавления значения

У меня есть каталог с огромным количеством файлов. Я хочу написать bash-скрипт для -

  1. Войдите в этот каталог
  2. Выясните, какие из них являются скриптами Perl (но ни один из них не имеет расширения .pl)
  3. Добавьте строку в начало каждой строки (я собираюсь добавить новый shebang). Если это не скрипт Perl, ничего не делайте.

Я не могу найти скрипты Perl, пробовал использовать grep, но не получаю нужную команду. Кроме того, третий шаг — это то, где я застрял.

решение1

Максимум, что вы можете сделать для поиска файлов Perl, — это использовать сам Perl для оценки.перл -свозвращает ненулевой код выхода, если файл не является правильным кодом perl, что, безусловно, верно для БОЛЬШИНСТВА файлов, которые вообще не являются perl. К сожалению, он делает то же самое, когда ему подают неисправный код perl, и возвращает 0, когда файл на самом деле не является кодом perl, но может быть проанализирован без ошибок, как если бы он был таковым. Если вы можете смириться с таким риском, то суть его может быть такой:

for FILE in * ; do
   if perl -c "$FILE" >/dev/null ; then
      sed -i -e '1i#!/usr/bin/perl' "$FILE"
   fi
done

Примечание: если я все равно прикоснусь к файлам, я бы добавил расширение .pl, если только нет ДЕЙСТВИТЕЛЬНО серьезной причины быть слепым.

Связанный контент