Как я могу считать весь Python и сценарии оболочки в моей целой системе?
В отсутствие более определенной цели это будет приблизительно, неважно, как Вы делаете это из-за неоднозначностей о том, что составляет сценарий оболочки и что составляет сценарий Python. Это не делает проблему слишком неточной, пока приближение - то, что Вы хотите. И можно получить хорошее приближение.
Учитывая, что, я предлагаю, чтобы эта команда перечислила сценарии Python и оболочка:
find . -type f -executable -exec file {} + | grep -Ei '(python|shell) script,'
Если вывод выглядит разумным для Ваших потребностей, можно выполнить его снова, измененный для подсчета количества результатов:
find . -type f -executable -exec file {} + | grep -Ei '(python|shell) script,' | wc -l
Можно добраться, некоторое "Разрешение отклонило" ошибки. Это хорошо. Я не рекомендую пытаться подавить те сообщения об ошибках, потому что необходимо считать или по крайней мере просканировать через них, чтобы видеть, похоже ли, что Вы не могли получить доступ к любым файлам или местоположениям, которые представляли интерес для Вас. Можно работать find
управляйте как корень с sudo
если Вы действительно хотите.
-type f
заставляет его найти только регулярные файлы. Обычно лучше использовать -xtype f
включать символьные ссылки, которые решают в регулярные файлы, но в этом случае который привел бы к сверхподсчету.-executable
заставляет его найти только файлы, которые являются исполняемым файлом пользователем, который работает find
. Рассмотрение неисполняемых файлов, чтобы видеть, кажется ли они, оболочка или сценарии Python, заставило бы команду взять значительно дольше. Можно также получить более ложные положительные стороны тот путь, в этом файлы, которые не являются исполняемым файлом, могут быть "библиотеками", а не сценариями, т.е. они могут состоять из команд оболочки и быть предназначены для определения источника с .
или source
в сценарии оболочки, или они могут быть модулями Python, с которыми можно было бы импортировать import
или from
в Python программирует. (Вы могли бы думать, что этого не произойдет, так как такие файлы обычно не имеют хижины, но find
ищет больше, чем хижина.) Однако можно опустить -executable
если Вам нравится - и если Вы готовы ожидать, поскольку Ваша команда пытается открыть и считать начало каждого регулярного файла в Вашей системе.-exec ... +
выполняет команду ...
с найденными файлами как его параметры командной строки. Это выполняет команду так же много раз по мере необходимости для обработки всех файлов. Часто это только однажды; для всех исполняемых файлов в Вашей целой системе это, вероятно, будет несколько раз, но много меньше раз чем при выполнении его однажды на файл (как -exec ... \;
сделал бы). Даже на том же количестве файлов, выполняя команду меньше раз имеет тенденцию быть особенно быстрее, чем выполнение его больше раз, потому что там ниже связан наверху.file
управляйте взглядами в начале файла и предположений, обычно вполне прилично, какой файл это. Это производит в двух форматах столбца с путем или именем файла слева и сводкой, какого вида из файла это, кажется, справа.grep
управляйте фильтрует его вход и выводы только строки это нечувствительно к регистру (-i
) соответствуйте расширенному регулярному выражению (-E
) (python|shell) script,
. Это - строки, которые содержат текст python script,
, shell script,
, или любой вариант случая этого. Файлы find
идентифицирует как те типы сценариев, покажет это.wc -l
, который появляется во второй из двух команд, показанных выше, строки количеств.Как показано эта техника является совершенно неподходящей для многих задач, которые включают проницательный, какие файлы каждый имеет. Причина состоит в том, что файл может иметь текст как python script,
на его имя, а также символы новой строки на его имя это, которое вызвало бы вывод file
не быть one-per-line. Это обычно важно, и часто даже жизненно важно, для составления таких вещей, и это может быть сделано. В этом случае, однако, Вы просто идете для оценки (из-за нечеткой природы самой проблемы), и кажется, что Вы не переименовываете, изменение, удаление, или даже создание чего-либо базировалось непосредственно на результате, таким образом, я не думаю, что стоит волноваться об этом. Если Вы заканчиваете тем, что выполнили итерации на этом и определили проблему более строго, то могло стоить обратиться к этому.
Обратите внимание, что существует одно особо важное дело, где Вы могли бы хотеть полагать, что неисполняемые файлы сценарии: если у Вас есть много сценариев Python, принесенных от системы как Windows, где они не отмечены исполняемый файл. В этом случае можно искать .py
файлы, хотя знать, что многие из них, вероятно, будут модулями Python, а не сценариями Python. Если хорошей практике Python помещения hashbang наверху сценария следовали (это полезно даже в Windows, потому что py.exe
и pyw.exe
распознайте их, хотя, к сожалению, это не всегда делается), затем техника, которая просто ищет hashbangs, но игнорирует, если файл является исполняемым файлом, может больше подходить для Ваших потребностей.
Существует также незначительный, но значительный случай, где Вы могли бы хотеть полагать, что неисполняемые файлы сценарии любого вида - или, более точно, где Вы могли бы хотеть протестировать на исполняемость по-другому. Если Вам смонтировали диск noexec
, затем никакой файл на нем не передаст find
-executable
тест. Обратите внимание, что это - другая проблема от выполнения find
как пользователь, у которого нет полномочий выполнить некоторые файлы - как проблема выполнения его как пользователь, у которого нет полномочий посмотреть в некоторых каталогах, это может быть решено путем выполнения его как достаточно привилегированного пользователя.
Эта проблема, поскольку Вы изложили его, необычна - обычно можно было бы хотеть найти сценарии определенного языка или маленькое семейство тесно связанных языков. Но в пользу будущих читателей, обратите внимание, что, находя все (например), сценарии оболочки на сингле, возможно, большом, каталог может также быть выполнен с небольшой модификацией вышеупомянутых команд. (То же содержит для техники, представленной в ответе WinEunuuchs2Unix - это полезно для этого, также.)
Например, для нахождения всех сценариев оболочки в текущем каталоге:
find . -type f -executable -exec file {} + | grep -Fi 'shell script,'
Вот инструкция по тому, как сделать это.
$ for f in * ; do file "$f" ; done
aptfielout: ASCII text, with very long lines
aptfilein: ASCII text, with very long lines
aptfileout: ASCII text
aptfileparse.sh: Bourne-Again shell script, ASCII text executable, with very long lines
aptfileparse.sh~: ASCII text, with very long lines
calc.py: Python script, UTF-8 Unicode text executable
catall.sh: Bourne-Again shell script, ASCII text executable
Полоса все файлы, которые не говорят "Сценарий оболочки Границы снова", или "сценарий Python". Добавьте к списку сценарии оболочки POSIX:
$ file /bin/zgrep
/bin/zgrep: POSIX shell script, ASCII text executable
/$ time find * -type f -print0 2>/dev/null | xargs -0 -P 8 file | \
sed 's/.*: //g' | sed 's/^ *//g' | \
grep -Eio 'shell script,|Python script,' | sort | uniq -c
19151 Python script,
127 python script,
18420 shell script,
real 16m14.939s
user 54m7.355s
sys 2m33.238s
Запуск с корня (/
) find
все файлы и канал к xargs
управляйте, когда нулевой байт завершил имена.
xargs
команда выполняется в параллели, максимизирующей все 8 центральных процессоров для более быстрой обработки. Каждый параллельный процесс звонит file
команда, которая получает описание файла как показано в предыдущем разделе.
grep
команда выбирает сценарии Python и сценарии оболочки.
sort
сценарии оболочки видов команды вместе и сценарии Python вместе.
uniq
управляйте считает случаи каждой группы.
Можно действительно обложить налогом систему, выполняющую все 8 центральных процессоров (в моем случае) сразу:
Красота Linux сияет через потому что другие задания, такие как устройство записи экрана, делающее .gif
и видео, работающее на третьем мониторе (ТВ большого экрана), продолжает функционировать обычно. Linux не позволяет xargs file
команда срывает систему.