web-dev-qa-db-ja.com

画像とPDF以外のすべてのファイルをGzipして名前を変更(拡張子.gzを削除)しますか?

次のコマンドを使用して、ディレクトリ(mydirectory)内のすべてのファイルをgzipできます。

gzip --suffix .gz --recursive mydirectory

しかし...

  1. ディレクトリ内の画像(.ico、.jpg、.png、.gif)およびPDF(.pdf)ファイルをgzip圧縮したくない。

  2. また、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です。

3
its_me

ステップ1:バックアップを作成します。次に、findを使用してファイルをフィルタリングし、gzipを実行してから、ファイルを元のファイル名に戻します。

find -type f -not \( -iname '*.ico' -or -iname '*.jpg' -or -iname '*.png' -or -iname '*.gif' \) -exec gzip "{}" \; -exec mv "{}.gz" "{}" \;

これは破壊的なコマンドなので、注意してください。最初に-exec...コマンドを削除して、圧縮するファイルのみが選択されるようにします。

3
Oli