我想选择以“data *”开头的文件夹中的所有文件,并按日期选择最新文件,以使所选文件的压缩zip文件不超过50MB。我怎么能用bash脚本做到这一点?
我很好地迭代地将文件添加到zip文件夹并检查大小,但我必须确保首先添加最新文件。
答案 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