gzip 所有文件但不删除它们

gzip 所有文件但不删除它们

我需要单独对目录中的所有文件(包括子目录中的所有文件)进行 gzip 压缩,之后不删除原始文件。假设我有 index.html,我希望在末尾有 index.html.gzip 和 index.html。

我可以通过以下方式对目录中的所有文件进行 gzip 压缩

gzip -r .

但我也想保留原始文件。

这可能吗?

答案1

find . -type f | \
while read -r x
do
  gzip -c "$x" > "$x.gz"
done

-c结果推送到 stdout 并保留原始文件。缺点是,您需要自己查找文件。find(1)但是,对于更复杂的遍历,您可以使用,如上所示:.从当前目录开始搜索,并-type f返回每个常规文件的名称。

答案2

find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;

您可以轻松地将其切换为包含您想要压缩的内容(-name '*.txt -or -name '*.html等等),而不是像现在这样排除某些文件(已压缩、备份和临时文件)。

也能很好地处理文件名中的空格。

更改gzipecho gzip进行测试。或者完全跳过 -exec 部分。

编辑:哦,我忘了说了,这并不检查是否<target>.gz已经存在。这可能是个问题,也可能不是。

编辑2:好的,我们开始检查是否存在文件。如果需要的话。请原谅我的一行。

while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz";  fi  done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))

我的find-foo 可能不是它本来的样子,很可能直接在 find 中跳过。

答案3

gzip-k选项

gzip 1.6(2013 年 6 月)添加了该-k, --keep选项,因此现在您可以:

gzip -kr .

并且它不会删除您的原始文件。

发现于:https://unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file

答案4

gzip -rc `ls` > archive.gz

在 Debian 上测试(gzip 1.3.12-6)

相关内容