特定のファイルを実行したい場合もありますが、フォルダーまで移動したくない場合があります。
ファイル名とfind -name file_name.py
は1つの結果のみを返します。それを使用できますか?
たとえば、特定のフォルダに移動して次を呼び出す代わりに:
python file_name.py
書くことができます:
python [ find -name file_name.py ]
または
python [ locate file_name.py ]
または、「コンピューター全体でこのファイル名を検索して使用する」ための一種の亜種ですか?できれば1行で。
あなたが探していると思う:
python $(find -name myscript.py)
行shopt -s globstar
をホームディレクトリの.bashrc
ファイルに追加します。 (これを試すには、コマンドラインでこれを入力します。現在のシェルでのみ有効になります。)
次に、**/
を使用して、「現在のディレクトリまたはサブディレクトリなどで再帰的に」、つまり単純なfind
コマンドと同じことを意味できます。
python **/myscript.py
警告:**/
はディレクトリへのシンボリックリンクを横断しますが、find
は横断しません。 bashでは、これを避けることはできません。 zshでは、**/
はすぐに使用でき、シンボリックリンクをトラバースしません(シンボリックリンクをトラバースするまれな場合に***/
があります)。
(Perlを使用しなくても)常に複数の方法があることを示すためです:find -name file_name.py -exec python {} \;
も機能します。 findのexecオプションは、検出したすべてのファイルに対して次のコマンドを実行します。このコマンドでは、{}
はファイルのプレースホルダーとして機能し、\;
は、コマンドの終わりを示します。
Findの出力を変数に保存し、次のようにして必要な処理を実行できます。
file=`find -name file_name.py` && python $file
find -name file_name.py
はfile_name.py
という名前のファイルを検索し、結果をfile
変数に保存し、コマンドが成功した場合(エラーなしで結果が取得された場合)、pythonは$file
。
別のもの:
xargs -0 python < <(find -name my_script.py -print0 -quit)
ここで、宿題として、ここで紹介するすべての方法の長所、短所、および違いを判断してください。