我有一个目录,其中包含名为的文件
SLS20160112.001 (20160112 stands for YYYYMMDD)
我希望将上个月的所有文件存档。例如,给定:
SLS20150201.001
SLS20160107.001
SLS20160130.001
SLS20160201.001
我将存档SLS20160107.001
,SLS20160130.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 月的文件。