小编典典

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

linux

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

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

但这仅适用于当前目录,而不适用于当前目录的子目录。如何重写以上语句,以便也将所有子目录中的文件压缩?


阅读 389

收藏
2020-06-07

共1个答案

小编典典

不需要循环或除find和以外的任何东西gzip

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
2020-06-07