Unixシェルスクリプトは先月のファイルを保持します。

Unixシェルスクリプトは先月のファイルを保持します。

次のファイルを含むディレクトリがあります。

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月にファイルを正しくバックアップするのに十分スマートです。

おすすめ記事