我制作了一个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.
答案 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