2017-04-18 70 views
0

有一個文件夾大小爲2.4 Gb。如何將大文件夾(2.4 gb)歸檔爲多個分開的獨立zip檔案文件

任務是通過SSH將此文件夾存檔爲多個分離的獨立zip檔案。

我曾嘗試:

zip -r -s 512m archive.zip folder 

此命令創建依賴拉鍊檔案:

archive.z01 
archive.z02 
archive.z03 
archive.z04 
archive.zip 

但我需要創建正是獨立拉鍊存檔可優化圖像「在線網絡服務」。此服務需要zip檔案,並且尺寸最大爲2Gb。

您能否提出一個可行的解決方案?

OS:SSH

感謝您的幫助:Linux的通過

訪問。

回答

0

下面是在bash短腳本,將這樣的伎倆:

#!/bin/bash 

FILES=`ls *.jpg` 

ZIP_PREFIX='archive' 
INDEX='1' 

MAX_SIZE='512' 

for PICT_FILE in $FILES 
do 
    ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip" 
    ARCH_SIZE=`du -m $ZIP_NAME | cut -f 1` 


    if [ $ARCH_SIZE -ge $MAX_SIZE ]; then 
      INDEX=`echo "$INDEX + 1" | bc` 
    fi 

    ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip" 

    zip $ZIP_NAME $PICT_FILE 

done 

MAX_SIZE以MB爲單位設置 您可以在「文件」與find或其他任何會爲您提供的列表替換命令文件

0

the.Legend,謝謝你的腳本。

下面是一些注意事項:

1. `du -m $ZIP_NAME | cut -f 1` 

返回1,對於尺寸小於1 MB的文件。

2. INDEX=`echo "$INDEX + 1" | bc 

在bash中無法正常工作。

這裏更新腳本,它是在Linux中進行測試:

#!/bin/bash 

FILES=`find ./image/` 

ZIP_PREFIX='example.com.image' 
INDEX='1' 

MAX_SIZE='512000' # 512 Mb 

for PICT_FILE in $FILES 
do 
    ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip" 
    ARCH_SIZE=`du -k $ZIP_NAME | cut -f 1` 

    # echo $ARCH_SIZE 
    # echo $MAX_SIZE 

    if [ $ARCH_SIZE -ge $MAX_SIZE ]; then 
      INDEX=$((INDEX + 1)) 
    fi 

    ZIP_NAME=${ZIP_PREFIX}"_"${INDEX}".zip" 

    zip $ZIP_NAME $PICT_FILE 

done 

結果是:

http://example.com/example.com.image_1.zip [500Mb] 
http://example.com/example.com.image_2.zip [500Mb] 
http://example.com/example.com.image_3.zip [500Mb] 
http://example.com/example.com.image_4.zip [227Mb]