ディレクトリ内のすべてのファイルを変更するには、コマンドを繰り返し適用します。

ディレクトリ内のすべてのファイルを変更するには、コマンドを繰り返し適用します。

ファイルを読み取り、修正版を出力するコマンドがありますstdout

./convert /path/to/file

このコマンドをディレクトリ内のすべてのファイルにどのように繰り返し適用できますか?上記のコマンドの結果として、各ファイルの既存の内容が上書きされます。

私が見つけたこの問題これは非常に似ていますが、提供されているすべてのソリューションには結果を単一のファイルに出力することが含まれますが、これは私が望むものではありません。

ベストアンサー1

私が正しく理解したら、次のようにファイルを変換できます。

./convert /path/to/file >/path/to/file.new
mv /path/to/file.new /path/to/file

ディレクトリツリーのすべてのファイルにコマンドを適用するには、次のようにします。find便利です。各ファイルに対して複雑なコマンドを実行する必要があるため、明示的にシェルを呼び出す必要があります。

find /path/to/top/directory -type f -exec sh -c '
  /path/to/convert "$0" >"$0.new" &&
  mv "$0.new" "$0"
' {} \;

おすすめ記事