Answers:
您可以这样做:
gzip *
gzip会告诉您它会跳过已经有.gz
结尾的文件。
如果该消息妨碍您使用:
gzip -q *
您尝试的方法不起作用,因为gzip
它无法读取要从stdin压缩的文件的文件名,因此必须使用:
ls | grep -v gz | xargs gzip
您将gz
在文件名中的任意位置(不只是在结尾处)排除带有模式的文件。¹您还必须注意,ls
当涉及到包含空格,换行符等文件名时,解析输出很危险。
一个更干净的解决方案,不依赖于gzip
以.gz
结尾结尾的文件,它还可以处理子目录中的非压缩文件:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ 如所izkata
评论:.gz
单独使用以改善这一点是行不通的。您将需要使用grep -vF .gz
或grep -v '\.gz$'
。仍然留下处理ls
输出的危险
$
为排除(-v
)所有文件名,该文件名由三个或更多字符组成,包括任何字符,后跟文件名中的“ gz”。因此,它将包括名称以“ gz”开头的文件。
gz
名称中带有任何地方的文件(开头除外)。因此最好还是将其锚定。没有使用过$
,它看起来好像您没有意识到.
正则表达式的含义,因此剩下的就是混乱的注释。
$
它就可以了。而且你也没有逃脱.
无论如何,所以它只是要排除的文件开始用gz
(因为它们不“之前的任何字符都gz
”)