将文件拆分为多个子文件夹并压缩每个子文件夹

将文件拆分为多个子文件夹并压缩每个子文件夹

我在用Ubuntu 18.04.5 LTS

我创建了以下脚本来将文件夹中的文件拆分到不同的子文件夹中:

#!/bin/bash

dir_size=850
dir_name="images"
n=$((`find . -maxdepth 1 -type f | wc -l`/$dir_size+1))
for i in `seq 1 $n`;
do
    mkdir -p "$dir_name$i";
    find . -maxdepth 1 -type f | head -n $dir_size | xargs -i mv "{}" "$dir_name$i"
done

不过,我希望zip在创建之后对每个子文件夹进行压缩,这样我最终的目录中就只能得到压缩的子文件夹。

对于如何做到这一点有什么建议吗?

感谢您的回复!

答案1

您可以使用 for 循环来获取固定数量的项目。将随着每次迭代a的数量c而增加。b

#!/bin/bash

mapfile -td '' < <( \
    find -maxdepth 1 -type f ! -name '*.zip' -print0 \
)
((${#MAPFILE} == 0)) && exit 1

for ((a=0, b=0, c=850; a<${#MAPFILE[@]}; a+=c, b++)); do
    mkdir images$b && \
    mv -t $_ "${MAPFILE[@]:$a:$c}" && zip -mTr images$b images$b
done

相关内容