tar 指定文件编号

tar 指定文件编号

我有一个包含 27K 个文件的目录,我想将它们压缩成多个独立的tar 文件,每个文件有 5000 个文件,最后一个文件显然有 2K(27K 不能被 5 整除)。

实现此目的最快/最简单的方法是什么?

答案1

首先创建每个档案的文件名:

find <directory> | split -l 5000 - files.

然后创建 tar:

for f in files.*; do tar -cf $f.tar --files-from $f; done

虽然尚未测试,但基本思想应该可行。

答案2

#!/bin/bash
files=( dir/* )

n=1
for ((i = 0; i < ${#files[@]}; i+=5000)); do 
  IFS=$'\n' tar cvzf foo_$((n++)).tgz --files-from - <<<"${files[*]:i:5000}"
done

解释

创建一个名为的数组files,其中包含目录的所有内容dir。迭代数组,每次增加迭代器 5000。使用offset 参数扩展在数组上每次执行最多 5000 个项目的滑动窗口,"${files[@]:i:5000}"并将其传递给文件名,并在每次调用时tar将文件名增加一。$((n++))

相关内容