Liste des fichiers par date de dernière modification

104

J'ai un annuaire: /home/user/

Comment puis-je lister tous les fichiers de ce répertoire (y compris ceux des sous-répertoires) et les classer par date de dernière modification?

Marty
la source

Réponses:

172

Vous pouvez utiliser:

ls -Rt

-Rsignifie récursif (inclure les sous-répertoires) et -tsignifie "trier par date de dernière modification".


Pour voir une liste de fichiers triés par date de modification, utilisez:

ls -l -Rt

Un alias peut également être créé pour y parvenir:

alias lt='ls -lht'
lt

-hdonne une sortie plus lisible.

mipadi
la source
16
Merci, c'est parfait. J'ai ajouté un -l là-dedans aussi pour que je puisse voir les dates, donc pour quiconque cherche cela plus tard, c'est- $ ls -lRt
Marty
4
Si vous faites cela à l'invite et que vous souhaitez voir les fichiers les plus récemment modifiés, pensez à ls -lrt[RhA]. le -rinverse l'ordre de tri, laissant les éléments récemment modifiés au bas de la liste ...
dmckee --- ex-moderator chaton
Ceci ajouté à un -ilavous donne à peu près toutes les informations dont vous auriez besoin.$ ls -ilaRt
Falkenfighter
J'ai développé cette réponse car en utilisant ll -Rt était la solution parfaite pour moi car j'avais besoin de voir les fichiers par date les plus récemment modifiés. Cela pourrait être utile aux autres.
Mus
@MusTheDataGuy lln'existe pas et n'est pas une commande. C'est principalement un alias dans le shell bash, mais pas défini dans la plupart des / certains /? distributions Linux. Certains le définissent comme un alias ll='ls -l'dans /etc/bash.bashrc ou /etc/.bashrc. Ainsi, cela peut ne pas fonctionner et il peut ne pas exister sur le système OP. Utilisez ls -l -Rtau moins, comme lsc'est une commande standard telle que définie par posix. Ou spécifiez que vous vouliez dire alias ll='ls -l'; ll -Rt.
KamilCuk
73

Si vous souhaitez une liste principale dans laquelle tous les fichiers sont triés ensemble par date de modification, montrant le répertoire dans lequel ils se trouvent, mais pas regroupés par répertoire , vous pouvez utiliser ceci:

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

Le résultat ressemble beaucoup à ls -l :

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

Mac OS X

Pour ceux d'entre vous qui utilisent Mac OS X, l'option -printf n'est pas disponible sur BSD find (vous obtiendrez cette erreur :)find: -printf: unknown primary or operator . Heureusement, vous pouvez installer GNU find via Homebrew (il devrait également y avoir une option pour Fink et Macports ):

brew install findutils

Après l'avoir installé, la recherche GNU devrait être disponible en tant que gfind. Donc, tout ce que vous avez à faire est de changer la ligne ci-dessus en:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Suspendu jusqu'à nouvel ordre.
la source
3
Joli. Le regroupement de répertoires avec ls -R est ennuyeux.
El Yobo
1
Excellent code, il a fallu environ au script. 5 secondes pour trier et imprimer des photos 13k dans de nombreux dossiers différents (via Cygwin sur un ordinateur assez lent).
Magnus
Oh maintenant c'est génial. Pour les personnes (comme moi) qui ne sont pas aussi familières findque l'auteur, ces arguments -printfsont des directives de format qui peuvent être trouvées dans man find(recherchez la cinquième instance de printfdans cette page).
Owen Blacker
4
Pour tous ceux qui veulent l'utiliser sur MacOS mais ne veulent pas s'embêter à installer findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'vous donnera à peu près la même sortie sur MacOS en utilisant uniquement les utilitaires
intégrés
sort -rpour inverser le tri et avoir les fichiers les plus récemment modifiés en haut.
maryisdead le
0

MAC OSX 2019

Si vous ne vous souciez pas de l'heure à laquelle il a été créé mais que vous voulez que votre liste soit triée, utilisez cette commande

==> ls -t

Si vous souhaitez commander et voir la date et les informations utilisateur, utilisez cette commande

===> ls -lt

Mussa Charles
la source
0

Pour les zshutilisateurs, vous pouvez également utiliser des qualificatifs glob (également documentés sur man zshexpn):

echo *(om)

oreprésente l' ordre de tri, vers le haut et mreprésente l'heure de la dernière modification .

Cela peut être utile lorsqu'il est utilisé dans une boucle for ou une autre commande:

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

Ou enchaîné avec un autre qualificatif global:

last_modified_file=(*(om[1]))
Ulysse BN
la source