Find exec - 为什么不能使用 {} 作为输出文件名?

Find exec - 为什么不能使用 {} 作为输出文件名?

我尝试使用此命令来压缩所有子目录中的所有 css 文件。

find . -iname "*.css*" -exec gzip -c '{}' > '{}'.gz  \;

但它仅创建一个 {}.gz 文件。我最终使用了这个:

find . -iname "*.css" -exec sh -c "gzip -c '{}' > '{}'.gz"  \;

效果很好。

问题是为什么第一个不起作用而第二个起作用了?

注意:我可以轻松地使用 gzip -k 开关来保留源文件,但 CentOS 7 上的 gzip 不支持它。

答案1

关键在于命令何时以及由哪个 shell 进行解释。在第一个中,您的命令行 shell 解释 >,在 find 甚至开始之前创建一个本地文件。在第二个中,在 find 替换 {} 后,子 shell 执行此操作,因此它按预期工作。

相关内容