我有一个场景需要在 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*.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