ファイルが見つかった場所でコマンドを実行するにはどうすればよいですか?
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
による) )再帰的に?
承認された回答:
このコマンドを実行すると、touch file
コマンドが開始されたディレクトリから、場合によっては複数回実行されます:
find -name '*.pdf' -exec touch file ;
一方、このバリアントを実行すると、コマンドの各インスタンスがターゲットファイルのディレクトリで実行されます。
find -name '*.pdf' -execdir touch file ;
どちらの場合も、touch file
に置き換えることで、これが実際に動作していることを確認できます。 いずれかのecho {}
および/またはpwd
。
マンページから:
-execdir command ;
-execdir command {} +
-exec
のように 、ただし、指定されたコマンドは、一致したファイルを含むサブディレクトリから実行されます。このサブディレクトリは、通常、find
を開始したディレクトリではありません。 。