Lista os arquivos pela data da última edição

104

Eu tenho um diretório: /home/user/

Como posso listar todos os arquivos neste diretório (incluindo aqueles em subdiretórios) e ordená-los pela data da última modificação?

Marty
fonte

Respostas:

172

Você pode usar:

ls -Rt

onde -Rsignifica recursivo (inclui subdiretórios) e -tsignifica "classificar pela data da última modificação".


Para ver uma lista de arquivos classificados por data de modificação, use:

ls -l -Rt

Um alias também pode ser criado para fazer isso:

alias lt='ls -lht'
lt

Onde -hfornece uma saída mais legível.

mipadi
fonte
16
Obrigado, isso é perfeito. Eu adicionei um -l lá também para que eu possa ver as datas, então para qualquer um que pesquisar isso mais tarde, é- ​​$ ls -lRt
Marty
4
Se você estiver fazendo isso no prompt e quiser ver os arquivos modificados mais recentemente, considere ls -lrt[RhA]. o -rinverte a ordem de classificação, deixando as coisas editadas recentemente no final da lista ...
dmckee --- gatinho ex-moderador
Isso adicionado a um -ilafornece praticamente todas as informações de que você precisa. $ ls -ilaRt
Falkenfighter
Ampliei essa resposta porque usar ll -Rtera a solução perfeita para mim, pois precisava ver os arquivos por data de modificação mais recente. Isso pode ser útil para outras pessoas.
Mus de
@MusTheDataGuy llnão existe e não é um comando. É principalmente um alias no shell bash, mas não está definido na maioria dos / some /? distribuições do Linux. Alguns o definem como alias ll='ls -l'em /etc/bash.bashrc ou /etc/.bashrc. Portanto, pode não funcionar e pode não existir no sistema de OPs. Use ls -l -Rtpelo menos, como lsé um comando padrão definido por posix. Ou especifique o que você quis dizer alias ll='ls -l'; ll -Rt.
KamilCuk
73

Se desejar uma lista mestre na qual todos os arquivos sejam classificados por data de modificação, mostrando o diretório em que estão, mas não agrupados por diretório , você pode usar isto:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

O resultado se parece muito com ls -l:

-rw-r - r-- 1 root root 3892 11/08/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 root root 22946 13/08/2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 root root 728 08/17/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 root root 873 18/08/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 root root 2552 19/08/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 root root 9546 19/08/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 root root 2201 19/08/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 root root 926 19/08/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 root root 18052 19/08/2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 root root 1845 19/08/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Para aqueles que usam Mac OS X, a opção -printf não está disponível no BSD find (você obterá este erro :)find: -printf: unknown primary or operator . Felizmente, você pode instalar o GNU find através do Homebrew (deve haver uma opção para Fink e Macports também):

brew install findutils

Após a instalação, o GNU find deve estar disponível para você como gfind. Então, tudo que você precisa fazer é alterar a linha acima para:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Pausado até novo aviso.
fonte
3
Agradável. Todo o agrupamento de diretórios com ls -R é irritante.
El Yobo
1
Ótimo código, o script demorou aprox. 5 segundos para classificar e imprimir 13k fotos em muitas pastas diferentes (por meio do Cygwin em um computador bastante lento).
Magnus de
Oh, isso é incrível. Para pessoas (como eu) não tão familiarizadas findquanto o autor, esses argumentos para -printfsão diretivas de formato que podem ser encontradas em man find(pesquise a quinta instância de printfnessa página).
Owen Blacker
4
Para quem deseja usar isso no MacOS, mas não quer se preocupar em instalar findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'fornecerá praticamente a mesma saída no MacOS usando apenas utilitários
integrados
sort -rpara reverter a classificação e ter os arquivos modificados mais recentemente no topo.
maryisdead
0

MAC OSX 2019

Se você não se importa com a hora em que ela foi criada, mas deseja que sua lista seja ordenada, use este comando

==> ls -t

Se você quiser pedir e ver a data e as informações do usuário, use este comando

===> ls -lt

Mussa Charles
fonte
0

Para os zshusuários, você também pode usar qualificadores glob (também documentados em man zshexpn):

echo *(om)

Onde osignifica ordem de classificação, ativa e msignifica hora da última modificação .

Isso pode ser útil quando usado em um loop for ou outro comando:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

Ou encadeado com outro qualificador glob:

last_modified_file=(*(om[1]))
Ulysse BN
fonte