次のコマンドを使用して、ディレクトリ(mydirectory
)内のすべてのファイルをgzipできます。
gzip --suffix .gz --recursive mydirectory
しかし...
ディレクトリ内の画像(.ico、.jpg、.png、.gif)およびPDF(.pdf)ファイルをgzip圧縮したくない。
また、gzipで圧縮されたファイルには、.gz
拡張子が付きます。私はそれを望んでいません。たとえば、gzip圧縮されたindex.html
ファイルはindex.html
そのものであり、index.html.gz
ではありません。
だから、最適/効率的にこれをどのように行うのですか?
これが今これをどのように行っているか(かなり長いプロセス)。
mydirectory
のすべてのファイルを圧縮しますが、元のファイルを削除/置換しないでください:
cd ~/mydirectory
find . -type f | \
while read -r x
do
gzip -c -9 "$x" > "$x.gz"
done
すべてのgzip圧縮された画像とPDFファイルを削除します。
find . -type f -iname "*.ico.gz" -exec rm -f {} \;
find . -type f -iname "*.jpg.gz" -exec rm -f {} \;
find . -type f -iname "*.png.gz" -exec rm -f {} \;
find . -type f -iname "*.gif.gz" -exec rm -f {} \;
find . -type f -iname "*.pdf.gz" -exec rm -f {} \;
既存のgzip圧縮されたファイルの名前を変更し、その名前から.gz
拡張子を本質的に削除します。
cd
for f in `find mydirectory -iname '*.gz'`; do
mv $f ${f%.gz}
done
私たちが今持っているもののほとんどは、.gz拡張子のないgzip圧縮されたテキストファイル(.html、.xml、.css、.js)、および非圧縮/非gzip圧縮された画像とPDFです。
ステップ1:バックアップを作成します。次に、find
を使用してファイルをフィルタリングし、gzipを実行してから、ファイルを元のファイル名に戻します。
find -type f -not \( -iname '*.ico' -or -iname '*.jpg' -or -iname '*.png' -or -iname '*.gif' \) -exec gzip "{}" \; -exec mv "{}.gz" "{}" \;
これは破壊的なコマンドなので、注意してください。最初に-exec...
コマンドを削除して、圧縮するファイルのみが選択されるようにします。