保存带有文件名的zip文件作为压缩文件的名称

时间:2013-11-07 10:33:26

标签: linux bash zip

我制作了一个linux脚本来压缩文件夹中的一组pcap文件。它将超过2天的文件保存到zip文件中。 zip保存为当前时间和日期作为zip的文件名。无论如何使用第一个和最后一个pcap文件作为zip文件的文件名。

#!/bin/bash
cd /mnt/md0/capture/DCN
#Limit of your choice
ulimit -s 32000
LIMIT=10
#Get the number of files, that has `*.pcap`
in its name, with last modified time 5 days      ago
NUMBER=$(find /mnt/md0/capture/dcn/ -maxdepth 1 -name "*.pcap" -mtime +5 | wc -l)
if [[ $NUMBER -gt $LIMIT ]]  #if number greater than limit
then
FILES=$(find /mnt/md0/capture/dcn/ -maxdepth 1 -name "*.pcap" -mtime +5)
#find the files
zip -j /mnt/md0/capture/dcn/capture_zip-$(date "+%b_%d_%Y_%H_%M_%S").zip $FILES
#zip them
rm $FILES
#delete the originals
ulimit -s 8192 #reset the limit
fi #end of if.

1 个答案:

答案 0 :(得分:1)

一种方法是使用shell数组:

IFS=$'\n' FILES=($(find /mnt/md0/capture/dcn/ -maxdepth 1 -name "*.pcap" -mtime +5))
#find the files and put the paths into an array "FILES"

这会将带有路径的所有文件放入shell数组“FILES”中,并考虑文件名中的空白。订单将以find给出的顺序排列。

构建zip文件名:

FIRSTNAME=${FILES[0]##*/}
LASTNAME=${FILES[${#FILES[@]}-1]##*/}
ZIPPREFIX="${FIRSTNAME%.*}-${LASTNAME%.*}"
#zip base name made from first and last file basenames

此处,FIRSTNAME=${FILES[0]##*/}生成带扩展名的文件名,${FIRSTNAME%.*}删除扩展名。它将剥离路径和文件扩展名。 (如果要保留文件扩展名,可以使用$FIRSTNAME。)值${#FILES[@]}是数组中的文件数。因此,有点凌乱的${FILES[${#FILES[@]}-1]}代表数组中的最后一个文件名。最后,##*/中的额外一点${FILES[${#FILES[@]}-1]##/*}删除路径,留下文件名。最终,ZIPPREFIX将是第一个基本名称,连字符(-)和最后一个基本名称。如果您愿意,可以使用连字符以外的其他字符。

zip -j /mnt/md0/capture/dcn/"$ZIPPREFIX"-$(date "+%b_%d_%Y_%H_%M_%S").zip "${FILES[@]}"
#zip them

这会压缩文件。请注意,${FILES[@]}提供了所有数组元素。

rm "${FILES[@]}"
#remove all the files