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

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

我有一个大量的文件夹数量,我想将它们 zip/gzip/(无论什么)压缩成 3 个或更多独立文件。

例如,假设我的服务器上有以下目录:

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

我需要以某种方式将它们压缩成 3 个单独的 zip 文件。它们看起来如下:

集合1.zip

/dir1
/dir2
/dir3

集合2.zip

/dir4
/dir5
/dir6

collection3.zip

/dir7
/dir8
/dir9

答案1

抱歉,我没有足够的信用来发表评论。但类似这样的内容应该可以帮助您压缩文件夹。

#! /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

它应该可以工作(没有时间测试它)将文件保存为 zip.sh 并运行为 ./zip.sh /your/directory/here 至于文件传输,你不能只在服务器上安装 ftp 客户端并通过 ftp 传输文件吗?

答案2

下面的脚本在 CentOS 6.5 上测试过。

遍历指定文件夹下的文件,并将它们逐个添加到不大于指定最大大小的 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

答案3

我找到了一个简单的解决方案。

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

ls > list.txt

然后我从列表中删除了./它。../

之后,我用文本编辑器将该列表分成 5 个不同的文件,例如listPart1,,...listPart2listPart3

我将这些列表放在包含所有需要压缩的文件夹的文件夹中,然后从该文件夹对每个列表运行此命令:

cat listPart1 | zip -r@ part1.zip

相关内容