-exec ドライロンをお探しですか?

-exec ドライロンをお探しですか?

find . -exec somecommand {} \;実際にコマンドを実行せずにaを変更した結果が何であるかを確認する方法はありますか?テスト実行(またはテスト実行または印刷)が好きですか?

たとえば、次のようなファイル構造があるとします。

/a/1.txt
/a/2.txt
/a/b/3.txt

find . type f -exec rm {} \;出力はstdoutとして印刷されますが、実行されないようにディレクトリ内でaテストする方法はありますか?例:

rm 1.txt
rm 2.txt
rm b/3.txt

修正する 注:rmこれは単なるサンプルコマンドであり、一般的なケースに興味があります。

答え1

echo rm代わりに走ることができます。rm

find . type f -exec echo rm {} \;

また、見つかったファイルを削除するオプションもfindあります。-delete

答え2

特に、次のrm作業は必要ありません-exec。 listを実行してfind . -type fから-delete前のコマンドでリストされたファイルを削除するには、追加します(明らかに一致するファイルを同時に作成/削除することはできません)。

また、このように引数の数に関係なく使用するコマンドの場合は、できるだけ少ない数のコマンドを実行するように置き換える必要がrmあります。\;+

答え3

これは少し複雑ですが、使用されている方法とは異なり、以下の出力echoコードはシェルで実行でき、ファイル名に引用符、スペース、シェルメタ文字などが含まれていても変更なく正しい結果を得ることができます。

printcmd() { printf '%q ' "$@"; printf '\n'; }

find . -exec bash -c "$(declare -f printcmd); "'printcmd "$@"' _ \
  somecommand {} \;

パラメータの前に追加する文字列は、-execその直後にbash -c "$(declare -f printcmd); "'printcmd "$@"' _ある$(declare -f printcmd)関数に展開されるコードです。実際に電話してください$1引数を受け取り、渡すため_のプレースホルダとして機能する関数です$0

シェルの出力をエスケープするには、zshbashの代わりにまたはを使用できます。ksh

関連情報