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

时间:2016-02-26 03:42:37

标签: shell unix sh

我的目录中包含以下格式的文件:

SLS20160112.001    (20160112 stands for YYYYMMDD)

我希望归档所有上个月的文件,例如:

SLS20160201.001

SLS20150201.001

SLS20160107.001

SLS20160130.001

对于列出的上述文件,我将存档SLS20160107.001和SLS20160130.001,因为它会在1月份标记文件名。

对于SLS20160201.001,它仍然保留,因为我只想存档上个月的文件。我只能从文件名中提取日期,而不是mdate或adate。

我当前的逻辑是循环遍历所有文件,然后获取上个月的文件,然后输出文件名并对其进行焦化。但不知道该怎么做。

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

GET PREVIOUS MONTH FILES AND THEN ECHO

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

1 个答案:

答案 0 :(得分:0)

看起来您想通过使用shell脚本来解决问题。我在Mac上做了很多工作,所以我使用csh / tcsh(OSX的默认shell),我的答案将在csh / tcsh脚本中。您可以将其翻译为bash(您的shell),也可以只需输入$ tcsh即可轻松生成新的shell。

您可以编写一个小的shell脚本,可以过滤所需月份的文件列表。

#!/bin/csh -f
set mon_wanted = '01'

foreach file (`ls -1 SLS*.*`)
   set mon = `echo $file | awk '{print substr($0, 8, 2)}'`
   if ($mon != $mon_wanted) continue
   echo -n $file ' '
end

假设文件名为foo.csh。通过

使其可执行
$ chmod 755 foo.csh

然后,

$ tar cvzf `foo.csh` > out.tar.gz