Unix Shell 脚本存档上个月的文件

Unix Shell 脚本存档上个月的文件

我有一个目录,其中包含名为的文件

SLS20160112.001    (20160112 stands for YYYYMMDD)

我希望将上个月的所有文件存档。例如,给定:

SLS20150201.001
SLS20160107.001
SLS20160130.001
SLS20160201.001

我将存档SLS20160107.001SLS20160130.001因为这两个文件的名称为 2016 年 1 月,而当前的名称为 2016 年 2 月。

对于SLS20160201.001(2016 年 2 月)不应存档,因为我只想存档上个月的文件。请注意,我只能考虑文件名,而不考虑 mtime 或 atime

我当前的逻辑是循环遍历所有文件,然后获取上个月的文件,然后通过管道输出文件名并对其进行压缩。但不知道如何做那部分。

for file in SLS*; do
   f="${file%.*}"

GET PREVIOUS MONTH FILES AND THEN ECHO

done | tar cvzf SlSBackup_<PREVIOUS_MONTH>.TAR.GZ -T-

答案1

使用 GNU date,您可以使用-d开关和简单的英语描述来获取任意日期。例如,date -d "one month ago"。所以,我们可以这样工作:

FILESPEC="SLS$(date -d "1 month ago" +"%Y%m")??.001"
LASTMONTH="$(date -d "1 month ago" +"%m")"
IFS=

tar cvzf "SlsBackup_${LASTMONTH}.tar.gz" $FILESPEC

令人高兴的是,它足够智能,如果您在 2017 年 1 月运行它,它会正确备份 2016 年 12 月的文件。

相关内容