我有一个27K文件的目录,我想把它们放到多个INDEPENDENT tar文件中,每个文件有5000个文件,最后一个文件显然有2K(27K不能被5除)。
什么是最快/最简单的方法来做到这一点?
首先用每个存档的文件名创build文件:
find <directory> | split -l 5000 - files.
然后创build焦油:
for f in files.*; do tar -cf $f.tar --files-from $f; done
未经testing,但基本的想法应该工作。
#!/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
创build一个名为files的数组,其中包含目录dir所有内容。 迭代迭代器5000,一次迭代数组。 使用数组上的偏移参数扩展来在一个时间"${files[@]:i:5000}"滑动多达5000个项目的窗口,并将其传递给tar ,并将文件名增加一个$((n++))在每个电话。