我如何recursion地bzip2在Linux中不以.bz2扩展名结尾的所有文件?
find是你的朋友。 我认为以下应该做到这一点:
find <target_dir> -not -name \*.bz2 -exec bzip2 \{\} \;
即如果你想要bzip的文件的目录是/ var / log / blah,那将是:
find /var/log/blah -not -name \*.bz2 -exec bzip2 \{\} \;
在我头顶(对不起,没有一个方便testing报价的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中。 但是我期望有些引用是错误的 – 我会先在引号中分别testing一下。
祝你好运! 你可能想用xz来代替,但是通常压缩效果更好,甚至可以压缩一切,而bzip2或者xz。
用zsh( setopt extended_glob必须打开):
bzip2 **/^*.bz2(.)
**在子目录中recursion; ^*.bz2 *.bz2匹配除*.bz2之外的所有内容; (.)限制为常规文件。
用bash 4,如果你可以忽略bzip2的抱怨,在目录上调用:
bzip2 **/!(*.bz2)
这是一个class轮。 如有必要,请先安装ifne 。 在Ubuntu上:
sudo apt-get install moreutils
接着:
find YOUR_DIR -type f -not -name \*.bz2 -print0 | ifne xargs -0 bzip2
这与其他答案一样,但不会得到有关bzip2ing目录的警告消息,如果没有bzip2了,就不会收到关于bzip2ing压缩数据到terminal的警告消息。 它也使用xargs等
YOUR_DIR可以使用通配符或多个dirs,例如您的* DIR或类似的。