GNU/Linux >> Linux の 問題 >  >> Linux

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

ファイルが見つかった場所でコマンドを実行するにはどうすればよいですか?
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を開始したディレクトリではありません。 。


Linux
  1. mkfs.hfsplus:コマンドが見つかりません

  2. id:コマンドが見つかりません

  3. w:コマンドが見つかりません

  1. mkfs:コマンドが見つかりません

  2. df:コマンドが見つかりません

  3. du:コマンドが見つかりません

  1. ファイル:コマンドが見つかりません

  2. tune2fs:コマンドが見つかりません

  3. fsck:コマンドが見つかりません