我如何以递归方式对所有未 bzip2 压缩的文件进行 bzip2 压缩?

我如何以递归方式对所有未 bzip2 压缩的文件进行 bzip2 压缩?

如何.bz2在 Linux 中以递归方式 bzip2 压缩所有不以扩展名结尾的文件?

答案1

find 是你的朋友。我认为以下应该可以做到:

find <target_dir> -not -name \*.bz2 -exec bzip2 \{\} \;

例如,如果要 bzip 的文件所在的目录是 /var/log/blah,则其内容为:

find /var/log/blah -not -name \*.bz2 -exec bzip2 \{\} \;

答案2

我首先想到的是(抱歉,手边没有 shell 来测试引用等):

for _t in `find . -print |grep -v -E "\.bz$"`; do bzip2 -9 $_t && echo OK $_t || echo FAIL $_t; done

这将使用 find 查找所有文件,使用 grep 删除带有 .bz2 扩展名的文件,然后将它们逐个输入到 bzip2 中。不过,我预计有些引用是错误的 - 我会先单独测试反引号中的位。

祝你好运!不过,你可能想改用 xz - 通常压缩效果更好 - 或者甚至将所有内容打包成 tar,然后改用 bzip2 或 xz。

答案3

使用 zsh (setopt extended_glob必须开启):

bzip2 **/^*.bz2(.)

**在子目录中递归;^*.bz2匹配除 之外的所有内容*.bz2(.)限制为常规文件。

使用 bash 4,如果您可以忽略bzip2有关在目录中调用的抱怨:

bzip2 **/!(*.bz2)

答案4

fish控制台中,它非常简单,您不必担心管道和奇怪的反斜杠:

set files (find *)
for i in $files
    bzip2 $i
end

相关内容