2016-11-04 24 views
-2

cronを使用して毎日重要なフォルダの1つをバックアップしています。そのフォルダ名は、現在の日付とともに格納されます。時間パターンに一致するディレクトリ内のすべてのファイルを削除

私の要件は、現在の日と最後の2日間のバックアップのみを保持する必要があります。

私は維持したいすなわち:

  • test_2016-11-04.tgz
  • test_2016-11-03.tgz
  • test_2016-11-02.tgz

残りのフォルダは自動的に削除する必要があります。シェルスクリプトの実行方法を教えてください。

以下は私のバックアップフォルダの構造です。

test_2016-10-30.tgz test_2016-11-01.tgz test_2016-11-03.tgz 
test_2016-10-31.tgz test_2016-11-02.tgz test_2016-11-04.tgz 

答えて

0

バックアップスクリプトの最後に追加することができます。

find ./backupFolder -name "test_*.tgz" -mtime +3 -type f -delete 

も使用してください。

ls -1 test_*.tgz | sort -r | awk 'NR > 3 { print }' | xargs -d '\n' rm -f -- 
0

あなたが残しておきたいファイルの配列を生成します。

その後
$ printf "%s\n" "${names[@]}" 
test_2016-11-04.tgz 
test_2016-11-03.tgz 
test_2016-11-02.tgz 

、ファイルをループしkeep those that are not in the array

それはこのようになりますように

names=() 
for d in {0..2}; do 
    names+=("test_"$(date -d"$d days ago" "+%Y-%m-%d")".tgz") 
done 

for file in test_*.tgz; do 
    [[ ! ${names[*]} =~ "$file" ]] && echo "remove $file" || echo "keep $file" 
done 

あなたのディレクターにだから今それだけの問題かrmような、より有意義なもので、それらのechoの交換である

remove test_2016-10-30.tgz 
remove test_2016-10-31.tgz 
remove test_2016-11-01.tgz 
keep test_2016-11-02.tgz 
keep test_2016-11-03.tgz 
keep test_2016-11-04.tgz 

:yが、これはのような出力になります。

+0

ご返信ありがとうございます。それは私の多くを助けた – iamarunk

1

ls -lrt | head -n -3 | awk '{print $9} とすると、ディレクトリ内の最後の3つのファイル以外はすべて印刷できます。 この出力をrmに渡すと、結果が得られます。

+1

価値のある読書:[なぜ* *パース 'ls'?](http://unix.stackexchange.com/q/128985/40596) – fedorqui

関連する問題