Como manter a ordem de classificação com xargs e gunzip

3

Eu estou tentando extrair o conteúdo de alguns arquivos por ordem alfabética (que neste caso também significa data e iteração) e quando eu testo o processo primeiro com ls :

$ find /opt/minecraft/wonders/logs/ -name 20* -type f -mtime -3 -print0 \
   | sort | xargs -r0 ls -l | awk -F' ' '{print $6 " " $7 " " $9}'

Eu recebo um resultado positivo:

Aug 18 /opt/minecraft/wonders/logs/2018-08-17-3.log.gz
Aug 18 /opt/minecraft/wonders/logs/2018-08-18-1.log.gz
Aug 19 /opt/minecraft/wonders/logs/2018-08-18-2.log.gz
Aug 19 /opt/minecraft/wonders/logs/2018-08-19-1.log.gz
Aug 20 /opt/minecraft/wonders/logs/2018-08-19-2.log.gz
Aug 20 /opt/minecraft/wonders/logs/2018-08-20-1.log.gz

No entanto, quando vou extrair os arquivos, a ordem de classificação é perdida:

$ find /opt/minecraft/wonders/logs/ -name 20* -type f -mtime -3 -print0 \
   | sort | xargs -r0 gunzip -vc | grep "\/opt.*"'

/opt/minecraft/wonders/logs/2018-08-18-1.log.gz:     66.8%
/opt/minecraft/wonders/logs/2018-08-18-2.log.gz:     83.1%
/opt/minecraft/wonders/logs/2018-08-19-1.log.gz:     70.3%
/opt/minecraft/wonders/logs/2018-08-19-2.log.gz:     72.9%
/opt/minecraft/wonders/logs/2018-08-20-1.log.gz:     73.3%
/opt/minecraft/wonders/logs/2018-08-17-3.log.gz:     90.2%

Como posso manter a ordem de classificação ao descompactar esses arquivos?

    
por Jesse Yishai 21.08.2018 / 05:48

1 resposta

7

Você usou a opção -print0 com find e -0 com xargs , mas esqueceu de usar -z para sort , portanto sort vê basicamente uma única linha (a menos que sua nomes de arquivos contêm \n ). A saída que você vê com ls provavelmente é ls fazendo alguma classificação.

find /opt/minecraft/wonders/logs/ -name '20*' -type f -mtime -3 -print0 |
  sort -z | xargs -r0 gunzip -vc | grep /opt

(Nota: 20* é um glob e precisa ser citado para o shell, então é passado literalmente para find , você não quer escapar de / para grep , o que isso faz é não especificado, não há necessidade de .* no final do regexp se tudo que você quer é imprimir a linha correspondente)

    
por 21.08.2018 / 05:59