我想在当前位置的子目录之间进行迭代,并分别gzip每个文件。为了在目录中压缩文件,我使用
for file in *; do gzip "$file"; done
但这仅适用于当前目录,而不适用于当前目录的子目录。如何重写以上语句,以便也将所有子目录中的文件压缩?
不需要循环或除find和以外的任何东西gzip:
find
gzip
find . -type f ! -name '*.gz' -exec gzip "{}" \;
这将查找当前目录中及其下所有名称不以.gz扩展名结尾的常规文件(即,所有尚未压缩的文件)。它分别gzip在每个文件上调用。
.gz
编辑的基础上,从评论user unknown:
user unknown
花括号({})替换为文件名,该文件名直接作为一个单词传递给以下命令,-exec如您在此处看到的:
{}
-exec
$ touch foo $ touch "bar baz" $ touch xyzzy $ find . -exec echo {} \; ./foo ./bar baz ./xyzzy