findの順序を変換します... -exec

findの順序を変換します... -exec

ファイルとディレクトリの名前を変更したいと思います。すべてäをに変換しようとしていますが、に変換したaとしましょうJärjestelmä/Säätimet。だから私はそう言いますfind -exec rename 's/ä/a/g'。今はもう見つからないと文句を言うようにfind変換されます。JärjestelmäJarjestelmaJärjestelmä

execこの問題は、コマンドを実行する順序を変更することで解決されます。可能ですか?そうでなければ、正しいアプローチは何ですか?

もはや何も変更されなくなるまでコマンドを再実行できるので、それは大きな問題ではありません。とにかく、これは私を迷惑にさせます。

答え1

マニュアルページのオプションを使用してくださいfind-depth

-depth Process each directory's contents before the  directory  itself.
          The -delete action also implies -depth.

これはSäätimet以前に処理され、名前を変更しただけでダウンできないと文句を言いませんJärjestelmäJärjestelmä

フルパスの処理を避けるために、renameBSDやGNUなどの-execdir一部の実装で使用しますfind(ディレクトリを変更し、最後の部分のみをコマンド引数に渡します{}./一部の実装ではプレフィックスを使用)。

mkdir Järjestelmä
touch Järjestelmä/Säätimet
find . -depth -execdir rename 's/ä/a/g' {} \;
find .

以下を提供します。

./Jarjestelma
./Jarjestelma/Saatimet

関連情報