web-dev-qa-db-ja.com

Linuxファイルシステム内のすべてのpythonファイルを見つける

すべてのpythonファイル(拡張子が.pyのファイル)をLinuxファイルシステム全体で検索するにはどうすればよいですか? find -name filenameを実行できることはわかっていますが、ファイルの種類に対してどのように実行できますか?

5

すべてのpythonファイルのファイル拡張子が.pyになるわけではありません-たとえば、grep -rni python /usr/binを実行してみてください)。これらのスクリプトのほとんどには、 'Shebang'(または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の使用は、ファイルのみを検索するようにfindを制限します-これを変更してから、シンボリックリンクなども表示できます(一部のスクリプトは/usr/libなどに含まれています) /usr/bin/などにシンボリックリンクされています)。さらに多くのオプションを利用できます。man findを実行すると、これらを確認できます。

fileは、ファイルに拡張子などがない場合でも(Shebang行などを使用して)ファイルタイプを推測できる必要があります- here を参照してください。

find: ‘/.../FILE’: Permission deniedなどのエラーを削除するには、スクリプトをルートとして実行し(Sudo bash -c "COMMAND"を使用して、Sudo suなどでシェルを開く)、または単に2>/dev/nullを追加します検索コマンド。

3
Wilf

-name '*.py'はパターンを受け入れるため、-name.

単一引用符に注意してください。

3
waltinator

Sudo find / -name "*.py"

(ルートから検索しているため)Permission deniedsを避けるために必要なのはSudoだけです。

3
Jedi