我有大量的文件夹,并且我想将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个不同的文件,例如listPart1 , listPart2 , listPart3 …
我把这些列表放在包含所有需要压缩的文件夹的文件夹中,并且我为每个列表从该文件夹运行这个命令:
cat listPart1 | zip -r@ part1.zip