有选择地压缩文件高达50M

时间:2015-10-07 19:59:56

标签: bash shell

我想选择以“data *”开头的文件夹中的所有文件,并按日期选择最新文件,以使所选文件的压缩zip文件不超过50MB。我怎么能用bash脚本做到这一点?

我很好地迭代地将文件添加到zip文件夹并检查大小,但我必须确保首先添加最新文件。

1 个答案:

答案 0 :(得分:1)

使用ls -t选择最新的数据文件很简单。这将返回按最近修改的内容排序的文件列表,该列表与您的字符串匹配。我会把这个列表放在某处的.txt文件中

ls -t data* > lsResults.txt

至于压缩,这是反复试验。我不能告诉你一个大文件将如何被压缩。我可以给你一个猜测,但不知道你的文件中有什么数据,我无法回答。

但是,我的建议是使用命令行归档程序(如7-zip)逐个添加数据文件,直到接近50MB。一旦超过50MB,只需删除最后添加的文件并停止循环。

这是我的示例脚本。您可能需要调整它以满足您的需求。

#!/bin/sh

ls -t data* > lsResults.txt
actualSize=0
maximumSize=50000000
archive=/my/data/archive.zip

for $filename in lsResults.txt; do
    #I will pretend you are using 7zip
    #You will have to change this to use what ever archiver you are have
    7za add -zip $archive $filename

    #get the size of the archive
    actualSize=$(wc -c < $archive)

    #check the size of the archive
    if [ $actualSize -gt $maximumSize ]; then
        #File size is over 50MB
        #Delete the last file added to the archive
        7z d $archive $filename
        #stop the loop so we dont keep adding files
        break;
    else
        #file is under 50MB, keep adding data
        #do nothing here
    fi
done