我有一个读取文件的命令,并在以下位置输出修改后的版本stdout:
./convert /path/to/file
Run Code Online (Sandbox Code Playgroud)
如何将此命令递归应用于目录中的所有文件,并使用上述命令的结果覆盖每个文件的现有内容?
我发现this question非常相似,但提供的所有解决方案都涉及将结果输出到单个文件,这不是我想要的。
如果我理解正确,您可以将一个文件转换为
./convert /path/to/file >/path/to/file.new
mv /path/to/file.new /path/to/file
Run Code Online (Sandbox Code Playgroud)
要将命令应用于目录树中的每个文件,请使用该find实用程序。由于您需要为每个文件执行一个复杂的命令,因此您需要显式调用一个 shell。
find /path/to/top/directory -type f -exec sh -c '
/path/to/convert "$0" >"$0.new" &&
mv "$0.new" "$0"
' {} \;
Run Code Online (Sandbox Code Playgroud)