파일 세트에서 최신 날짜 파일 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
  • 그런 다음 파일을 삭제하십시오.

답변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

관련 정보