我有一个日志目录,我想设置一个作业来压缩使用压缩包。问题是我不想重新压缩已经压缩的日志。
我尝试使用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 .gz
或grep -v '\.gz$'
。这仍然存在处理ls
“输出”的危险