文件集中仅保留 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*.xmlwf_*_$D1*.xml并且wf_*_$D2*.xml
  • 然后删除文件

答案2

尝试这个:

for set in ABC DCB XYZ; do 
    printf "%s\n" [Ww]f_${set}_*.xml | sort -t_ -k3,3n | head -n -3 | xargs echo rm
done

如果看起来找到了正确的文件,请重新运行它,而不需要echo

相关内容