使用 gzip 压缩目录中除已存在的 .gz 文件之外的文件

使用 gzip 压缩目录中除已存在的 .gz 文件之外的文件

我有一个日志目录,我想设置一个作业来压缩使用压缩包。问题是我不想重新压缩已经压缩的日志。

我尝试使用ls | grep -v gz | gzip,但这似乎不起作用。

有没有办法做到这一点?基本上我想对目录中不以 .gz 结尾的每个文件进行 gzip 压缩。

答案1

你可以这样做:

gzip *

gzip 会告诉您它会跳过已经有结尾的文件.gz
如果该消息妨碍您可以使用:

gzip -q *

您尝试的方法不起作用,因为gzip没有从标准输入读取要压缩的文件的文件名,要使其工作,您必须使用:

ls | grep -v gz | xargs gzip

您将排除gz文件名中任何位置具有该模式的文件,而不仅仅是在末尾。您还必须注意,ls当涉及包含空格、换行符等的文件名时,解析 的输出是危险的。

一个更干净的解决方案,不依赖于gzip跳过带有.gz结尾的文件,它还处理子目录中的非压缩文件:

find .  -type f ! -name "*.gz" -exec gzip {} \;



1正如所izkata评论的:.gz单独使用来改善这一点是行不通的。您需要使用grep -vF .gzgrep -v '\.gz$'。这仍然存在处理ls“输出”的危险

相关内容