私はdbバックアップを保存するマウントを持っています。それを制御できないほど大きくなることを避けるために、30日分のバックアップだけでなく、15日ごとに作成されるバックアップも保持するつもりです。したがって、30日が経過すると、フォルダーが1日または15日に作成された場合は、そのままにしておきます。
現在、これを使用してバックアップを30日間のみ保持していますが、1日目と15日目に作成されたフォルダーを省略するにはどうすればよいですか?
find /mnt/clusterfs01-data01/db01/* -type d -ctime +30 -exec rm -rf {} \;
フォルダー名のサンプルディレクトリリスト。
0 drwx------ 7 root root 324 Nov 11 01:35 2016-11-11_01-31-41
0 drwx------ 7 root root 250 Nov 11 06:25 2016-11-11_06-25-03
find
以外のソリューションを気にしません。
ディレクトリ名の日時文字列に基づいて一致を除外するには、追加できます
! \( -name '????-15-??*' -o -name '????-30-??*' \)
または
-not \( -name '????-15-??*' -o -name '????-30-??*' \)
find
コマンドに。
タイムスタンプに基づいて本当にしたい場合、私がそれを行うことができる唯一の方法は、(notemtime
以来ここでtouch
を使用していますコマンドは私のシステムのctime
を変更していないようです:%Td
をctime
の%Cd
に変更します:
find dir -type d -mtime +30 -printf '%Td\t%p\0' |
while read -rd '' day dir; do
case "$day" in
15|30) ;;
*) echo rm -rf -- "$dir";;
esac
done
これを試してください:
rm -rf $(find /mnt/clusterfs01-data01/db01/* -maxdepth 0 -type d -ctime +30 | grep -v "[0-9]\{4\}-01\|15-[0-9]\{2\}")