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