Você não especifica um shell, então eu aconselho você a usar o Zsh :
ls /path/to/*(.om[1])
Veja um exemplo com cinco arquivos que foram criados no mesmo minuto (nomes de arquivos no formulário HHMMSS.txt
):
> ls tmp/378142
total 0
drwxr-xr-x 7 johnsyweb staff 238 14 Jan 08:23 ./
drwx------ 24 johnsyweb staff 816 14 Jan 08:20 ../
-rw-r--r-- 1 johnsyweb staff 0 14 Jan 08:22 082237.txt
-rw-r--r-- 1 johnsyweb staff 0 14 Jan 08:22 082238.txt
-rw-r--r-- 1 johnsyweb staff 0 14 Jan 08:22 082239.txt
-rw-r--r-- 1 johnsyweb staff 0 14 Jan 08:22 082240.txt
-rw-r--r-- 1 johnsyweb staff 0 14 Jan 08:22 082241.txt
Usando echo
:
> echo tmp/378142/*(.om[1])
tmp/378142/082241.txt
Usando ls
:
> ls -laF tmp/378142/*(.om[1])
-rw-r--r-- 1 johnsyweb staff 0 14 Jan 08:22 tmp/378142/082241.txt
Explicação:
Isso usa a expansão de nome de arquivo do Zsh.
Um asterisco é expandido para todos os itens em um diretório:
> echo tmp/378142/*
tmp/378142/082237.txt tmp/378142/082238.txt tmp/378142/082239.txt tmp/378142/082240.txt tmp/378142/082241.txt
Modificando isso com um .
, significa todos os arquivos regulares (sem diretórios ou links simbólicos). Isso é conhecido como um sinalizador globbing :
> echo tmp/378142/*(.)
tmp/378142/082237.txt tmp/378142/082238.txt tmp/378142/082239.txt tmp/378142/082240.txt tmp/378142/082241.txt
o
especifica a ordem de classificação, on
, por nome:
> echo tmp/378142/*(.on)
tmp/378142/082237.txt tmp/378142/082238.txt tmp/378142/082239.txt tmp/378142/082240.txt tmp/378142/082241.txt
om
é ordenado por tempo modificado ( Om
) inverteria a ordem:
> echo tmp/378142/*(.om)
tmp/378142/082241.txt tmp/378142/082240.txt tmp/378142/082239.txt tmp/378142/082238.txt tmp/378142/082237.txt
[1]
seleciona o primeiro item da lista:
> echo tmp/378142/*(.om[1])
tmp/378142/082241.txt