ls(1)
ordena os arquivos pelo nome, portanto ls | tail -1
deve fazer.
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).
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
.