gpt4 book ai didi

linux - 使用文件名保存 zip 文件作为压缩文件的名称

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:17 24 4
gpt4 key购买 nike

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

最佳答案

一种方法是使用 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

关于linux - 使用文件名保存 zip 文件作为压缩文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com