我尝试使用此命令来压缩所有子目录中的所有 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 执行此操作,因此它按预期工作。