我想要 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
为该占位符执行
引用占位符,以防您的任何文件名中含有空格。