Vamos supor um diretório que contém imagens de câmeras diferentes:
DCIM1234.JPG
DCIM1235.JPG
DCIM1236.JPG
DSCN4120.JPG
DSCN4121.JPG
DSCN4122.JPG
DSCN4123.JPG
IMG5840.JPG
IMG5841.JPG
IMG5842.JPG
IMG5843.JPG
A classificação de todos esses arquivos por data de modificação nas câmeras é fácil de usar ls -t
. O problema é que a maioria dos sistemas de arquivos tem uma precisão de 1 segundo ou mais, então algumas fotos podem ter timestamps idênticos, por exemplo, ao disparar rajadas. Nesse caso, ls -t
pode perder a ordem natural do arquivo, que se reflete nos nomes.
Como ordenar os arquivos por hora de modificação, enquanto ordena por nome os arquivos que têm hora de modificação idêntica?
Geralmente, é recomendado evitar analisar
ls
a saída. Como doneal24 sugerido acima,stat
é uma opção melhor.De
man stat
:Assim
stat -c "%Y/%n" *.JPG
, você obterá o carimbo de data e hora em segundos e o nome de cada arquivo, separado por um/
. Por exemplo:A saída desse comando é canalizada para
sort -t/ -k1,1n -k2
, que classifica primeiro pela primeira coluna, numericamente (o carimbo de data/hora) e depois pela segunda coluna. As colunas são separadas por/
(-t/
).Finalmente, a saída do
sort
comando é canalizada parased
, que remove todos os caracteres até e incluindo o primeiro/
(o delimitador escolhido). O resultado na lista de nomes de arquivos na ordem desejada (com os arquivos "mais novos" listados por último).Examine o comando
sort
combinado com a formatação dals
saída de data. Algo assim deve ser um bom ponto de partida:Com base na saída de
ls -l
assim:Explicação de cada parte desse comando:
ls -l
. Neste caso, estamos usando o estilo de saída Unix epoch com+%s
sort -k6,6n -k7
. Classifique numericamente na 6ª coluna dels -l
saída e, em seguida, classifique pela 7ª coluna usando o método padrão que é alfabético.awk '{print $7}'
. Apenas mostra a 7ª coluna. Se você quisesse mostrar a 6ª coluna, precisaria usarawk '{print $6 $7}'
.Aqui está a documentação de classificação e a documentação do registro de data e hora do arquivo .