"find -exec"を使用して見つかったファイルのディレクトリ(現在のディレクトリではない)からコマンドを実行するには?

私があるディレクトリに、およびサブディレクトリがあるとしdir1ます。各ディレクトリにはファイルがあり、各ディレクトリの各ディレクトリで同じコマンドを実行し、そのディレクトリ内でコマンドを実行したいと思います。dir2dir3foofoo

私が「手で」実行した場合は、次のようになります。

cd dir1
(execute on foo)
cd ../dir2
(execute on foo)
cd ../dir3
(execute on foo)

このコマンドを実行する必要があります。各ディレクトリでfooバッチ予約スクリプト(不思議な場合はHTCondor用)であり、予約スクリプトによって開始された実行の出力が各サブディレクトリで終わるように各サブディレクトリで実行する必要があります。

質問」ファイルディレクトリからファイルを検索してコマンドを実行する私が知る限り、私の質問に対する答えはありません。質問に対する最初の答えは解決策に近いので、私の場合はうまくいかず、2番目の答えは使用方法を知るのに十分ではありません。

ベストアンサー1

findサポートしていると仮定すると、-execdir代わりにこのオプションを使用してください。-exec

find . -type f -name 'foo' -execdir pwd \;

その後、各ディレクトリに順番に変更され、対応するfooファイルがある場合は実行されますpwd

注:このソリューションの目的を変更して、名前付きディレクトリからコマンドを実行することはできませんfoo。これを行うには、提供された各パラメータを繰り返し、各パラメータを順番に使用する-exec sh -c '...'簡単なアプローチに戻る必要があります。この例は各ディレクトリで実行されます。shcdpwd

find . -type d -name 'foodir' -exec sh -c '
    for d in "$@"; do ( cd "$d" || exit; pwd ); done
    ' _ {} +

おすすめ記事