mydirectory
我能够使用以下命令对目录 () 中的每个文件进行 gzip 压缩:
gzip --suffix .gz --recursive mydirectory
但...
我不希望目录内的图像(.ico、.jpg、.png、.gif)和 PDF(.pdf)文件被压缩。
并且那些经过 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...
首先删除命令以确保它只选择您想要压缩的文件。