Selecione o maior nome de arquivo numerado

4

Eu tenho uma lista de arquivos com data abaixo ...

    filename_20120101.dat
    filename_20120102.dat
    filename_20120103.dat

Eu preciso de um script que selecione o arquivo mais recente com base na data no nome do arquivo (não no carimbo de data do arquivo).

    
por Rich 04.03.2013 / 11:40

2 respostas

7

ls(1) ordena os arquivos pelo nome, portanto ls | tail -1 deve fazer.

    
por 04.03.2013 / 12:08
5

Resposta zig obrigatória:

echo "The highest-numbered file is" filename_*.dat([-1])

Este é um glob com o qualificador de glob [NUM] para manter apenas o NUMth match (um valor negativo conta a partir da última partida). Se você tiver números de largura variável, adicione o n qualifier a

% ls
filename_1.dat filename_12.dat filename_17.dat filename_2.dat filename_8.dat
% echo filename_*.dat([-1])
filename_8.dat
% echo filename_*.dat(n[-1])
filename_17.dat

Globbing ocorre apenas em um contexto que procura uma lista de palavras, portanto, se você deseja atribuir o nome do arquivo a uma variável, é necessário torná-lo uma matriz que contenha um elemento:

latest=(filename_*.dat[-1])
echo "The highest-numbered file is $latest"

Em qualquer shell, você pode definir os argumentos posicionais para a lista completa de correspondências e manter o último.

set_latest () {
  eval "latest=\${$#}"
}
set_latest filename_*.dat
echo "The highest-numbered file is $latest"

Lembre-se de que isso retorna o último em ordem alfabética, não em ordem numérica, por exemplo, filename_10.dat é depois de filename_09.dat , mas antes de filename_9.dat .

    
por 06.03.2013 / 01:37