BZIP2多个文件不丢失原文件

BZIP2多个文件不丢失原文件

我想要 bzip2 大约 1000 个文件。但是,我的任务是不要删除旧文件,并将原始文件及其 bz2 文件保留在同一文件夹中。最快的方法是什么?

只是为了重新表述我的问题,假设我有 file1.txt、file2.txt、file3.txt...file1000.txt,我需要将其 bz2 版本放在同一文件夹中而不删除它们。

如何实现这一目标?

答案1

-k选项在手册中描述bzip2

-k --keep

在压缩或解压缩期间保留(不要删除)输入文件。

所以如果你像平常一样压缩文件bzip2,但添加-k,你不会删除原始文件。

要将所有.txt文件压缩到一个目录中:

bzip2 -k ./*.txt

如果这会生成“参数列表太长”(如果您有数以万计的文件,则会出现这种情况),请改用简单的 shell 循环:

for name in ./*.txt; do
    bzip2 -k "$name"
done

答案2

find /PATH/ -type f -execdir bzip2 -k '{}' \;

/PATH/,递归查找所有正则F艾尔斯,和执行ute在各自的目录bzip2 -k /PATH/TO/FILE将保留原始文件和压缩文件的目录bzip2

所以,像这样的文件夹结构

/PATH/file1
/PATH/file2
/PATH/folder1/
/PATH/folder1/file1
/PATH/folder1/file2

会导致

/PATH/file1
/PATH/file1.bz2
/PATH/file2
/PATH/file2.bz2
/PATH/folder1/
/PATH/folder1/file1
/PATH/folder1/file1.bz2
/PATH/folder1/file2
/PATH/folder1/file2.bz2

上面的解决方案将串行运行,为了让事情更快,让我们并行运行它

find /PATH/ -type f | xargs -L1 -P10 -I{} bzip2 -k '{}'

递归查找正则F文件/PATH/并将它们作为输入传递给xargs该文件,然后解析输入L伊内斯(1一次),产生一个过程(最大10并行运行),使用输入占位符{}用于处理输入(即本例中的一行)。并bzip2 -k为该占位符执行

引用占位符,以防您的任何文件名中含有空格。

相关内容