web-dev-qa-db-ja.com

フォルダーに移動する必要がないように、findコマンドを他のコマンドと組み合わせるにはどうすればよいですか?

特定のファイルを実行したい場合もありますが、フォルダーまで移動したくない場合があります。

ファイル名とfind -name file_name.pyは1つの結果のみを返します。それを使用できますか?

たとえば、特定のフォルダに移動して次を呼び出す代わりに:

python file_name.py

書くことができます:

python [ find -name file_name.py ] 

または

python [ locate file_name.py ]

または、「コンピューター全体でこのファイル名を検索して使用する」ための一種の亜種ですか?できれば1行で。

7
Charles Clayton

あなたが探していると思う:

python $(find -name myscript.py)
12
RobotHumans

shopt -s globstarをホームディレクトリの.bashrcファイルに追加します。 (これを試すには、コマンドラインでこれを入力します。現在のシェルでのみ有効になります。)

次に、**/を使用して、「現在のディレクトリまたはサブディレクトリなどで再帰的に」、つまり単純なfindコマンドと同じことを意味できます。

python **/myscript.py

警告:**/はディレクトリへのシンボリックリンクを横断しますが、findは横断しません。 bashでは、これを避けることはできません。 zshでは、**/はすぐに使用でき、シンボリックリンクをトラバースしません(シンボリックリンクをトラバースするまれな場合に***/があります)。

5
Gilles

(Perlを使用しなくても)常に複数の方法があることを示すためです:

find -name file_name.py -exec python {} \;

も機能します。 findのexecオプションは、検出したすべてのファイルに対して次のコマンドを実行します。このコマンドでは、{}はファイルのプレースホルダーとして機能し、\;は、コマンドの終わりを示します。

1
Jos

Findの出力を変数に保存し、次のようにして必要な処理を実行できます。

file=`find -name file_name.py` && python $file

find -name file_name.pyfile_name.pyという名前のファイルを検索し、結果をfile変数に保存し、コマンドが成功した場合(エラーなしで結果が取得された場合)、pythonは$file

0
jobin

別のもの:

xargs -0 python < <(find -name my_script.py -print0 -quit)

ここで、宿題として、ここで紹介するすべての方法の長所、短所、および違いを判断してください。

0
gniourf_gniourf