Mantenha apenas 3 arquivos de data (isto é, a data anexada nos arquivos) no conjunto de arquivos e exclua os arquivos restantes no diretório específico

0

Eu tenho um cenário que eu preciso implementar no Unix. Em um diretório, gostaria de excluir os arquivos com base na data anexada no final do arquivo, esses arquivos são arquivos XML de volta. Os arquivos devem ser excluídos com base nos critérios abaixo. Mantenha apenas 3 arquivos de data (data anexada nos arquivos) no conjunto de arquivos e exclua os arquivos restantes.

Arquivos de diretório: -

Conjunto 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

Conjunto 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

Conjunto 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
    
por surajreddy2 15.08.2018 / 20:21

2 respostas

0

Tente isso,

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 {} +
  • armazena as últimas 3 datas em D1, D2 e D
  • encontre os arquivos com o padrão wf_*_*.xml
  • ignore os padrões com as três últimas datas como wf_*_$D*.xml , wf_*_$D1*.xml e wf_*_$D2*.xml
  • remova os arquivos
por 15.08.2018 / 20:46
0

Tente isto:

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

Se parece que encontrou os arquivos corretos, execute-o novamente sem o echo

    
por 15.08.2018 / 21:38