我想在我当前位置的子目录之间进行迭代,并单独gzip每个文件。 为了压缩目录中的文件,我使用
for file in *; do gzip "$file"; done
但是这只能在当前目录下工作,而不能在当前目录的子目录下工作。 我怎样才能重写上述语句,以便它也拉链所有子目录中的文件?
无需循环或任何东西比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
我更喜欢gzip -r ./
,它做同样的事情,但更短。
find . -type f | while read file; do gzip "$file"; done