ファイルが見つかったコマンドを実行します。

ファイルが見つかったコマンドを実行します。

ファイルが見つかった場所でコマンドをどのように実行できますか?次の内容で
名前が付けられたディレクトリがあるとします。testdir

$ ls -R testdir/
testdir/:
dir1  dir2  dir3  dir4  dir5

testdir/dir1:
doc1.pdf

testdir/dir2:
file1.txt

testdir/dir3:
doc2.pdf

testdir/dir4:
file2.txt

testdir/dir5:
doc5.pdf

findこれで、特定のファイル/ファイル形式が見つかったタスク(コマンドの実行)を実行したいと思います。たとえば、次のようにします*.pdf

$ find . -name '*.pdf'
./testdir/dir3/doc2.pdf
./testdir/dir5/doc5.pdf
./testdir/dir1/doc1.pdf

touch fileそれでは、上記のコマンドがファイルを検索するコマンド(例:)を実行したいとします。つまり、file少なくとも1つのディレクトリを.pdf持つすべてのディレクトリに名前付きファイルを作成して、次のようになります。

$ ls -R testdir/
testdir/:
dir1  dir2  dir3  dir4  dir5

testdir/dir1:
doc1.pdf  file

testdir/dir2:
file1.txt

testdir/dir3:
doc2.pdf  file

testdir/dir4:
file2.txt

testdir/dir5:
doc5.pdf  file

このような作業をどのように実行しますか?
おそらくファイルが見つかるたびに、cdファイルが存在する場所に移動してコマンドを繰り返し実行します。
私はそれがfind素晴らしい機能を持っていることを知っています。-execしかし、それを動作させることはできません。


これは私が何をしたいのかを理解する例です。広範囲に言うと:ファイルを再帰的に検索するコマンドをどのように実行しますかfind

ベストアンサー1

このコマンドを実行すると、touch fileコマンドを起動したディレクトリでコマンドが実行されます(複数回可能です)。

find -name '*.pdf' -exec touch file \;

一方、このバリアントを実行すると、コマンドの各インスタンスがターゲットファイルのディレクトリで実行されます。

find -name '*.pdf' -execdir touch file \;

touch fileどちらの場合も、およびecho {}/またはに変更すると、実際に機能していることがわかりますpwd


マンページから:

-execdir command ;
-execdir command {} +

    に似ています-execが、指定されたコマンドは通常、起動したディレクトリではなく一致するファイルを含むサブディレクトリで実行されますfind

おすすめ記事