次のファイルを含むディレクトリがあります。
SLS20160112.001 (20160112 stands for YYYYMMDD)
先月のすべてのファイルをアーカイブしたいです。たとえば、次のようになります。
SLS20150201.001
SLS20160107.001
SLS20160130.001
SLS20160201.001
どちらのファイルも名前が2016年1月で、現在のファイルが2016年2月なので、そのSLS20160107.001
ファイルをアーカイブします。SLS20160130.001
(2016年2月)の場合、SLS20160201.001
先月のファイルだけを保存したいので保存しないでください。 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月にファイルを正しくバックアップするのに十分スマートです。