如何在bash中的所有子目录下gzip所有文件

我想在我当前位置的子目录之间进行迭代,并单独gzip每个文件。 为了压缩目录中的文件,我使用

for file in *; do gzip "$file"; done 

但是这只能在当前目录下工作,而不能在当前目录的子目录下工作。 我怎样才能重写上述语句,以便它也拉链所有子目录中的文件?

Solutions Collecting From Web of "如何在bash中的所有子目录下gzip所有文件"

无需循环或任何东西比findgzip

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

这将查找当前目录中名称不以.gz扩展名结尾的所有常规文件(即所有尚未压缩的文件)。 它对每个文件分别调用gzip


根据来自user unknown评论编辑:

大括号( {} )被替换为文件名,它直接作为一个单词传递给-exec后面的命令,如下所示:

 $ touch foo $ touch "bar baz" $ touch xyzzy $ find . -exec echo {} \; ./foo ./bar baz ./xyzzy 

我更喜欢gzip -r ./ ,它做同样的事情,但更短。

 find . -type f | while read file; do gzip "$file"; done