execを検索 - {}を出力ファイル名として使用できないのはなぜですか? [コピー]

execを検索 - {}を出力ファイル名として使用できないのはなぜですか? [コピー]

このコマンドを使用して、すべてのサブディレクトリのすべてのCSSファイルを圧縮してみました。

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

ただし、これは{} .gzファイルのみを生成します。私はこれを使用するようになりました:

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

良い結果。

問題は、最初のものが機能せず、2番目のものが機能する理由です。

注:ソースファイルを保存するためにgzip -kスイッチを簡単に使用できますが、CentOS 7のgzipはそれをサポートしません。

ベストアンサー1

コアは、コマンドが解釈されるタイミングとシェルによって決まります。まず、コマンドラインシェルは>を解釈し、findが起動する前にローカルファイルを生成します。 2番目の方法では、findが{}を置き換えた後、サブシェルがこれを行うので、期待どおりに機能します。

おすすめ記事