*.html
特定の種類のすべてのファイルをその場所で圧縮して解凍する必要があります。解凍するには、次のコマンドを使用しましたが、私はうまくいきました。
find dir -name "*.html.tar.gz" -exec tar -xvzf {} \;
私は*.htmp.tar.gz
それぞれのディレクトリでそれを見ることができます。
圧縮のために次のコマンドを実行しようとしていますが、findの引数接続が発生しないため機能しません。
find dir -name "*.html" -exec tar -cvzf {}.tar.gz {} \;
ソリューションを提案し、ストレス低減ソリューションが完璧であるかどうかを教えてください。
編集:私が今使っているものはターゲット名を必要としませんが、それがまったく不可能かどうか疑問にgunzip
思います。tar
したがって、元の問題を解決する答えを待っています。
fork()
編集:要件は、C関数とコマンドを介して実行する必要があるコマンドを持つことです。exec()
だから私はパイプラインが可能だとは思わない。
編集:また、圧縮にできるだけ少ない時間がかかるため、効率的な方法を探しています。
ベストアンサー1
find . -name '*.html' -type f -exec sh -c '
for file do tar czf "$file.tar.gz" "$file"; done' sh {} +
Cで:
execlp("find", "find", ".", "-name", "*.html", "-type", "f", "-exec",
"sh", "-c", "for file do tar czf \"$file.tar.gz\" \"$file\"; done",
"sh", "{}", "+", 0);
呼び出し元に失敗またはアーカイブプロセスを報告するには、次のように改善できます。
find . -name '*.html' -type f -exec sh -c '
ok=true
for file do
tar czf "$file.tar.gz" "$file" || ok=false
done
"$ok"' sh {} +
の-exec cmd {} +
場合、find
コマンドを実行するために生成されたプロセスがゼロ以外の終了状態に戻ると、ゼロ以外の終了状態で終了します。