Comment lister tous les fichiers dans un répertoire et sous-répertoires dans l'ordre chronologique inverse?
Je veux faire quelque chose comme ls -t
mais aussi avoir les fichiers dans les sous-répertoires inclus. Mais le problème est que je ne veux pas que la sortie soit formatée comme le fait ls -R
, ce qui est comme ceci:
[test]$ ls -Rt
b testdir test
./testdir:
a
Je veux qu'il soit formaté comme la commande find
affiche les fichiers dans les sous-répertoires. C'est-à-dire
[test]$ find .
.
./b
./test
./testdir
./testdir/a
Mais ce que find
ne semble pas faire, c'est ordonner le résultat chronologiquement par heure de dernière mise à jour.
Alors, comment puis-je lister tous les fichiers dans un répertoire et sous-répertoires, au format que find
, mais dans l'ordre chronologique inverse?
7 réponses
Essayez celui-ci:
find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\ -f2-
ls -lR
est d'afficher tous les fichiers, répertoires et sous-répertoires dans le répertoire personnel
ls -lR | more
est utilisé pour afficher tous les fichiers dans un flux.
Si le nombre de fichiers que vous souhaitez afficher correspond à la limite d'argument maximale, vous pouvez utiliser globbing pour obtenir ce que vous voulez, avec récursivité si vous avez le support globstar.
Pour exactement 2 couches Utilisation profonde: ls -d * */*
Avec globstar, pour l'utilisation de la récursivité: ls -d **/*
L'argument -d
de ls
lui indique de ne pas récurser les répertoires passés comme arguments (puisque vous utilisez le shell globbing pour faire la récursivité). Cela empêche ls
d'utiliser son formatage de récursivité.
find -type f -print0 | xargs -0 ls -t
Inconvénient: ne fonctionne que sur un certain nombre de fichiers. Si vous avez des quantités extrêmement importantes de fichiers, vous avez besoin de quelque chose de plus compliqué
Essayez ceci:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
La commande wfg5475 la réponse de fonctionne correctement, il faut juste ajouter une chose pour afficher uniquement les fichiers dans un répertoire et sous répertoire:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'
Ajouté une chose: ^d
pour ignorer tous les répertoires des sorties de liste