我有一个日志目录,我想设置一个作业来使用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' 输出的危险
| 归档时间: |
|
| 查看次数: |
29180 次 |
| 最近记录: |