ファイルセット内の最新の3つの日付ファイル(つまり、ファイルに追加された日付)のみを保持し、特定のディレクトリ内の残りのファイルを削除します。

ファイルセット内の最新の3つの日付ファイル(つまり、ファイルに追加された日付)のみを保持し、特定のディレクトリ内の残りのファイルを削除します。

Unixで実装する必要があるシナリオがあります。ディレクトリ内のXMLバックアップファイルであるファイルの末尾に追加された日付に基づいてファイルを削除したいと思います。ファイルは次の基準に従って削除する必要があります。ファイルセットに最新の3つの日付ファイル(ファイルに日付が追加されたもの)のみを残し、残りを削除します。

カタログファイル:-

セット1:

Wf_ABC_201801011224.xml
wf_ABC_201801011220.xml
Wf_ABC_201801011241.xml
wf_ABC_201801011230.xml
Wf_ABC_201801011244.xml
wf_ABC_201801011260.xml

セット2:

Wf_DCB_201501021224.xml
wf_DCB_201601031220.xml
Wf_DCB_201601041241.xml
wf_DCB_201401051230.xml
Wf_DCB_201701061244.xml
wf_DCB_201801061260.xml

グループ3:

Wf_XYZ_201501011224.xml
wf_XYZ_201601011220.xml
Wf_XYZ_201701011241.xml
wf_XYZ_201801011230.xml
Wf_XYZ_201801021244.xml
wf_XYZ_201801031260.xml
Wf_XYZ_201501041224.xml
wf_XYZ_201601051220.xml
Wf_XYZ_201601061241.xml
wf_XYZ_201401071230.xml
Wf_XYZ_201701081244.xml
wf_XYZ_201801091260.xml

ベストアンサー1

この試み、

D1=`date -d "1 day ago" +"%Y%m%d"` && D2=`date -d "2 day ago" +"%Y%m%d"` && D=`date   +"%Y%m%d"` && find . -type f -name "wf_*_*.xml" -not -name "wf_*_$D*.xml" -not -name "wf_*_$D1*.xml" -not -name "wf_*_$D2*.xml" -exec rm {} +
  • 過去3つの日付をD1、D2、Dに保存します。
  • パターン付きファイルを探すwf_*_*.xml
  • その後、過去3つの日付のパターンを無視wf_*_$D*.xmlしてwf_*_$D1*.xmlwf_*_$D2*.xml
  • その後、ファイルを削除します。

おすすめ記事