Find

Find exec - 為什麼不能使用 {} 作為輸出文件名?

  • July 8, 2019

我嘗試使用此命令壓縮所有子目錄中的所有 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 替換 {} 之後確實如此,因此它按預期工作。

引用自:https://unix.stackexchange.com/questions/528938