web-dev-qa-db-fra.com

Comment répertorier tous les fichiers d'un répertoire et des sous-répertoires dans l'ordre chronologique inverse?

Je veux faire quelque chose comme ls -t mais aussi inclure les fichiers dans les sous-répertoires. Mais le problème est que je ne veux pas que la sortie soit formatée comme ls -R fait, 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 des 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 la dernière mise à jour.

Alors, comment puis-je lister tous les fichiers d'un répertoire et de sous-répertoires, au format que find fait, mais dans l'ordre chronologique inverse?

54
dan

Essaye celui-là:

find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\  -f2-
37
marco

ls -lR consiste à afficher tous les fichiers, répertoires et sous-répertoires du répertoire de base ls -lR | more est utilisé pour afficher tous les fichiers d'un flux.

80
rashmi

Si le nombre de fichiers que vous souhaitez afficher correspond à la limite d'arguments maximale, vous pouvez utiliser la méthode de regroupement pour obtenir ce que vous souhaitez, avec récursivité si vous disposez de la prise en charge de globstar.

Pour une utilisation en profondeur de 2 couches: ls -d * */*

Avec globstar, pour une utilisation récursive: ls -d **/*

Le -d argument à ls lui dit de ne pas recurse les répertoires passés sous forme d'arguments (puisque vous utilisez l'étalement de shell pour effectuer la récursion). Ceci empêche ls d’utiliser sa mise en forme récurrente.

12
Parakleta

Essayez find . -type d ou find . -type d -ls

3
Bobby
find -type f -print0 | xargs -0 ls -t

Inconvénient: ne fonctionne que sur un certain nombre de fichiers. Si vous avez une très grande quantité de fichiers, vous avez besoin de quelque chose de plus compliqué.

3
yankee

essaye ça:

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
2
wfg5475

La commande dans la réponse de wfg5475 fonctionne correctement, il suffit d'ajouter une chose pour afficher uniquement les fichiers d'un répertoire et d'un sous-répertoire:

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'

Ajout d'une chose: ^d pour ignorer tous les répertoires des sorties de liste

1
Pankaj Tiwari