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