“tar -czf” 针对前 5000 个文件

“tar -czf” 针对前 5000 个文件

我有一个目录,里面有太多文件。

我想压缩该目录中的前 5000 个文件,file.tar.gz然后压缩为 5001 - 10000 个文件……依此类推

怎么做?

答案1

使用 ls 生成名称列表,并使用 head 和 tail 过滤它们。下面是一行循环执行此操作的代码。您需要知道目录中的文件数量(ls | wc -l 会告诉您)。

for ii in $(seq -w 5000 5000 NUMBER_OF_FILES) ; do echo $ii ; ls | head -n $ii | tail -n 5000 | tar -f ../ARCHIVE_FILE_$ii.tar.gz -czv -T - ; done

将大写部分替换为您想要的部分。

答案2

此脚本逐步将所有文件添加到档案中,并对档案进行编号。重命名 ARCHIVE_NAME 和“5000”。

$ COUNT_MOD=0; for i in *; do tar -r -f ARCHIVE_NAME`expr $COUNT_MOD / 5000`.tar $i; ((COUNT_MOD++)) ; done

此脚本未经过优化,因此存在一些规则:

  1. 启动此脚本时,ARCHIVE_NAME# 不能存在,因此如果出现任何失败,请执行“rm ARCHIVE_NAME*”。
  2. 脚本将目录条目视为 1 个条目,但 'tar' 则不然。Tar 将进入目录并递归添加所有文件,最终存档中可能会有超过 5000 个文件。
  3. 压缩档案无法更新,我漏掉了‘-z’,抱歉:-)

答案3

您可以构建一组列出每 5000 个文件名的文件,并将它们与 tar 的 -T 参数一起使用。类似这样的操作可能会有效:

ls -1 | split -l 5000 - tarlist
count=0
for f in tarlist*
do
    tar -czf save.$count.tar.gz -T $f
    count=`expr $count + 1`
done

相关内容