我有一个日志目录,我想设置一个作业来使用gzip进行压缩。问题是我不想重新压缩我已经压缩的日志。
我尝试使用ls | grep -v gz | gzip
,但这似乎不起作用。
有没有办法做到这一点?基本上我想 gzip 目录中不以 .gz 结尾的每个文件。
Ant*_*hon 27
你可以这样做:
gzip *
Run Code Online (Sandbox Code Playgroud)
gzip 会告诉你它会跳过已经有.gz
结尾的文件。
如果该消息妨碍您可以使用:
gzip -q *
Run Code Online (Sandbox Code Playgroud)
您尝试的方法无效,因为gzip
没有读取要从 stdin 压缩的文件的文件名,要使其正常工作,您必须使用:
ls | grep -v gz | xargs gzip
Run Code Online (Sandbox Code Playgroud)
您将gz
在文件名的任何位置排除具有该模式的文件,而不仅仅是在末尾。¹ 您还必须注意,ls
当文件名包含空格、换行符等时,解析 的输出是危险的。
一个更干净的解决方案,不依赖于gzip
跳过带有.gz
结尾的文件,它也处理子目录中的非压缩文件:
find . -type f ! -name "*.gz" -exec gzip {} \;
Run Code Online (Sandbox Code Playgroud)
¹正如izkata
评论:.gz
单独使用来改善这一点,是行不通的。您需要使用grep -vF .gz
或grep -v '\.gz$'
。这仍然存在处理ls
' 输出的危险