すべてのpythonファイル(拡張子が.py
のファイル)をLinuxファイルシステム全体で検索するにはどうすればよいですか? find -name filename
を実行できることはわかっていますが、ファイルの種類に対してどのように実行できますか?
すべての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
を追加します検索コマンド。
-name '*.py'
はパターンを受け入れるため、-name
.
単一引用符に注意してください。
Sudo find / -name "*.py"
(ルートから検索しているため)Permission denied
sを避けるために必要なのはSudo
だけです。