Find
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 不支持它。
這完全取決於何時以及通過哪個 shell 來解釋命令。首先,您的命令行 shell 解釋 >,在 find 甚至開始之前創建一個本地文件。在第二個中,子shell 在 find 替換 {} 之後確實如此,因此它按預期工作。