Найти все файлы с Python Shebang

Я пытаюсь запустить проверку PEP8 с большим деревом источников. Дерево состоит из сочетания файлов на разных языках. Идея состоит в том, чтобы проверить все сценарии Python, не указывая их явно. Большинство этих файлов на самом деле не имеют расширения .py . Есть ли простой способ найти все файлы со словом Python в shebang или найти все файлы, которые будут запускаться с Python при их исполнении?

2 Solutions collect form web for “Найти все файлы с Python Shebang”

Попробуйте сделать это:

 grep -rl '^#!/.*python' . 

То же самое с ack :

 ack -rl '^#!/.*python' . 

С GNU или FreeBSD или NetBSD или OpenBSD (и, возможно, другие) awk :

 find . -type f -exec awk ' /^#!.*python/{print FILENAME} {nextfile}' {} + 

Будет выглядеть только в первой строке каждого файла и будет работать как можно меньше awk .

nextfile не является стандартным, но находится в нескольких реализациях, включая GNU (что, вероятно, там, откуда оно было создано).

Хотя вышеприведенный код, похоже, работает и в других реализациях, оператор nextfile ничего не будет делать (будет распознан как выражение, состоящее из unset nextfile variable), так что это означает, что все файлы будут прочитаны полностью, а filename будет напечатано для каждой соответствующей строки.

Если ваш awk поддерживает FNR (например, POSIX awks, но не оригинальный awk , поэтому в Solaris /usr/xpg4/bin/awk а не /usr/bin/awk ), а не в следующем nextfile , вы можете записать его:

 find . -type f -exec awk 'FNR == 1 && /^#!.*python/{print FILENAME}' {} + 

Который по-прежнему будет работать как можно больше awk но будет полностью читать файлы.

Еще одна альтернатива, чтобы полностью не читать файлы и работать с каждым awk и find но будет означать, что запуск одного awk на файл будет следующим:

 find . -type f -exec awk ' /^#!.*python/{r=1};{exit} END {exit(1-r)}' {} \; -print 
  • как добавить строку в файл / etc / sudoers с помощью скрипта оболочки (50servers)?
  • Как tar-bzip старые файлы в ежегодных группах
  • Как отформатировать петлю bash с помощью sed, awk, grep и wc
  • Предотвращение завершения работы с использованием сценария оболочки при завершении работы
  • Как правильно запустить и остановить сценарий оболочки в linux, busybox?
  • Усечение точности даты
  • Скрипт для файлов SCP работает вручную, но не через cron
  • Хранение более длинного текстового вывода в памяти в переменных оболочки vs Запись на диск
  • Почему этот исходный оператор не работает?
  • Как анализировать параметры в функции оболочки для навигации по нескольким проектам
  • Изменить регистр n-й буквы в строке
  • Linux и Unix - лучшая ОС в мире.