На этот вопрос уже есть ответ:
Как я могу найти во всей файловой системе Linux все файлы python (файлы с расширением .py
)? Я знаю, что могу выполнить find -name filename
, но как это сделать для типа файла?
Не все файлы Python будут иметь расширение файла .py
- Попытайтесь работать grep -rni python /usr/bin
например). Большинство этих сценариев будет иметь 'хижину' (или hashbang) строкой (например. #!/usr/bin/env python
, #!/usr/bin/python2.7
). Это сообщает интерпретатору сценария, какая программа должна использоваться для выполнения его, и Вы могли искать это для нахождения файлов Python
Однако можно также использовать mimetype файла (обычно вроде text/x-python
) найти его:
find / -type f | while read in ; do if file -i "${in}" | grep -q x-python ; then echo "${in}" ; fi ; done
Где /
Ваш намеченный поисковый каталог.
С find
Вы могли также добавить -executable
опция искать только исполняемые файлы. Также использование -type f
ограничьте находят, чтобы только искать файлы - Вы могли изменить это и затем показать символьные ссылки и т.д. также (некоторые сценарии содержатся в /usr/lib
и т.д. и symlinked к /usr/bin/
и т.д.). Намного больше опций доступно, Вы видите их путем выполнения man find
.
file
должен смочь предположить тип файла, даже если файл не имеет никакого расширения и т.д. (использующий строку хижины и т.д.) - посмотрите здесь.
К удаленному любой find: ‘/.../FILE’: Permission denied
и т.д. ошибки, можно запустить скрипт как корень (использование sudo bash -c "COMMAND"
, открытие оболочки с sudo su
и т.д.), и/или просто добавляют 2>/dev/null
к команде находки.
-name '*.py'
с тех пор -name
принимает шаблон.
следят за одинарными кавычками.
sudo find / -name "*.py"
Вам только нужно sudo
для предотвращения Permission denied
с (так как Вы ищете от корня).