最後の2つのバックアップのみを保持し、残りのディレクトリは削除するコマンドを作成しようとします。
directory path = /apps/
以下はディレクトリです。ここに保管したいです。
source
source_2020-01-13
source_2019-12-09
ディレクトリを削除して古いディレクトリを削除します。スクリプトはcronを使用して100を超えるサーバーで実行されます。
ここでの問題は、find
コマンドから古いディレクトリを追加または削除できないことですmtime
。その理由は、バックアップディレクトリのタイムスタンプがすべてのサーバーで同じではないからです。デフォルトでは、コマンド/スクリプトはsource_YYYY_MM_DDという最後の2つのバックアップディレクトリを保持し、残りは削除する必要があります。
誰でも助けることができますか?
メモ:ソース_YYYY_MM_DDバックアップディレクトリです。
drwx------ 11 root root 4096 Jul 22 2019 source_2019-07-22
drwx------ 11 root root 4096 Jul 29 2019 source_2019-07-29
drwx------ 11 root root 4096 Aug 5 2019 source_2019-08-05
drwx------ 11 root root 4096 Aug 14 2019 source_2019-08-14
drwx------ 11 root root 4096 Oct 14 2019 source_2019-10-14
drwx------ 11 root root 4096 Dec 9 03:59 source_2019-12-09
drwx------ 11 root root 4096 Jan 13 05:20 source_2020-01-13
drwxr-x--- 12 root root 4096 Apr 21 09:11 source
答え1
ls -d1 /apps/source_20??-??-??/ | head -n -2 | xargs rm -rf
これにより、
ls -d1 /apps/source_20??-??-??/
一致するディレクトリのみが並べ替えられた順序で一覧表示され、
head -n -2
最後の2つのエントリがインポートされ、
xargs rm -rf
ディレクトリが削除されます。
答え2
find /apps/ -type d -not -name source -name "source*" -print | sort | head -n -2 | xargs rm -rfv
find apps/ -type d -not -name source -name "source*" -print
すべてのバックアップディレクトリが見つかり、コマンドがそのsource
ディレクトリを選択しないようにしますfind
。
sort
最新の項目が最後であることを確認してソートされます。これは、変更時間に基づくのではなく、ディレクトリ名に基づいています。
head -n -2
すべてのディレクトリ、最後の2つのバックアップディレクトリをインポートします。
xargs rm -rfv
前のコマンドでフィルタリングされた最後の2つを除くすべてのバックアップディレクトリを削除します。
(警告:ディレクトリ名にスペースが含まれている場合、このコマンドは機能しません。常に偽のディレクトリを作成し、このコマンドを試して最初にテストしてください。)