对除图像和 PDF 之外的所有文件进行 Gzip 压缩并重命名(删除 .gz 扩展名)?

对除图像和 PDF 之外的所有文件进行 Gzip 压缩并重命名(删除 .gz 扩展名)?

mydirectory我能够使用以下命令对目录 () 中的每个文件进行 gzip 压缩:

gzip --suffix .gz --recursive mydirectory

但...

  1. 我不希望目录内的图像(.ico、.jpg、.png、.gif)和 PDF(.pdf)文件被压缩。

  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

删除所有压缩的图像和 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)以及未压缩/未压缩的图像和 PDF。

答案1

步骤 1:进行备份。然后使用find过滤文件并运行 gzip,然后将文件移回原始文件名:

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

这是一个破坏性的命令,所以请小心。-exec...首先删除命令以确保它只选择您想要压缩的文件。

相关内容