如何将大量文件夹压缩成三个独立的zip文件?

我有大量的文件夹,并且我想将zip / gzip /(甚至曾经)压缩成3个或更多的独立文件。

举个例子,比方说,我在我的服务器上有这个目录:

/dir1 /dir2 /dir3 /dir4 /dir5 /dir6 

我需要以某种方式压缩他们在3个单独的zip文件。 这看起来像这样:

collection1.zip

 /dir1 /dir2 /dir3 

collection2.zip

 /dir4 /dir5 /dir6 

collection3.zip

 /dir7 /dir8 /dir9 

对不起,我没有足够的信誉来评论。 但是像这样的东西应该可以帮助你压缩文件夹。

 #! /bin/bash DIR=$1 i=0 arr=() zipnum=0 cd $DIR for item in * do if [[ -d $item ]]; then if [ $i -lt 2 ]; then arr+=($item) ((i++)) else arr+=($item) zip ${arr[@]} $zipnum ((zipnum++)) i=0 arr=() fi fi done ((zipnum++)) zip ${arr[@]} $zipnum 

它应该工作(没有时间去testing)保存文件为zip.sh并运行./zip.sh / your / directory / here至于文件传输你不能只是安装一个FTP客户端服务器和FTP文件?

下面的脚本在CentOS 6.5上进行了testing。

遍历指定文件夹下的文件,并逐一添加到不大于指定最大大小的zip文件。 将文件一次添加到一个zip文件可能会导致CPU或存储I / O峰值:

 #!/bin/bash files_folder="/home/username/public_html/" zip_folder="/home/username/" zip_maxsize=524288000 # 500 MB zip_prefix="archive" zip_suffix=0 cd ${files_folder} for FILE in $(find . -type f); do zip_file="${zip_folder}${zip_prefix}-${zip_suffix}.zip" if [ -f ${zip_file} ]; then zip_size=$(ls -l ${zip_file} |cut -d' ' -f5) fi file_size=$(ls -l ${FILE} |cut -d' ' -f5) comb_size=$((zip_size + file_size)) if [ ${comb_size} -gt ${zip_maxsize} ]; then zip_suffix=$((zip_suffix + 1)) zip_file="${zip_folder}${zip_prefix}-${zip_suffix}.zip" fi zip -q ${zip_file} ${FILE} done 

我find了一个简单的解决scheme。

首先我列出了我需要压缩的所有文件夹:

 ls > list.txt 

比我从列表中删除./../

之后,我已经将文本编辑器分成5个不同的文件,例如listPart1listPart2listPart3

我把这些列表放在包含所有需要压缩的文件夹的文件夹中,并且我为每个列表从该文件夹运行这个命令:

 cat listPart1 | zip -r@ part1.zip