find コマンドまたはその他のコマンドを使用したディレクトリの削除

find コマンドまたはその他のコマンドを使用したディレクトリの削除

最後の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つを除くすべてのバックアップディレクトリを削除します。

(警告:ディレクトリ名にスペースが含まれている場合、このコマンドは機能しません。常に偽のディレクトリを作成し、このコマンドを試して最初にテストしてください。)

関連情報