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

StackOverflow https://stackoverflow.com/questions/4909751

  •  29-10-2019
  •  | 
  •  

Question

Je veux faire quelque chose comme ls -t mais aussi les fichiers dans les sous-répertoires inclus. Mais le problème est que je ne veux pas que la sortie soit formée comme ls -R fait, ce qui est comme ceci:

[test]$ ls -Rt
b       testdir test

./testdir:
a

Je veux qu'il soit formaté comme le find La commande affiche des fichiers dans des sous-répertoires. C'est à dire:

[test]$ find .
.
./b
./test
./testdir
./testdir/a

Mais quoi find Il ne semble pas que l'ordre de commander le résultat chronologiquement par dernière mise à jour.

Alors, comment puis-je énumérer tous les fichiers dans un répertoire et des sous-répertoires, dans le format que find Est-ce que, mais dans l'ordre chronologique inverse?

Était-ce utile?

La solution

Essaye celui-là:

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

Autres conseils

ls -lR est d'afficher tous les fichiers, répertoires et sous-répertoires dans le répertoire domestiquels -lR | more est utilisé pour afficher tous les fichiers dans un flux.

Si le nombre de fichiers que vous souhaitez afficher s'inscrit dans la limite d'argument maximale, vous pouvez utiliser Globbing pour obtenir ce que vous voulez, avec Recursion si vous avez un support Globstar.

Pour exactement 2 couches d'utilisation profonde: ls -d * */*

Avec Globstar, pour une utilisation de la récursivité: ls -d **/*

La -d argument ls Il lui dit de ne pas reproduire les répertoires passés sous forme d'arguments (puisque vous utilisez le shell global pour faire la récursivité). Cela empêche ls en utilisant sa formatage de récursivité.

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

Inconvénient: fonctionne uniquement sur une certaine quantité de fichiers. Si vous avez des quantités extrêmement importantes, vous avez besoin de quelque chose de plus compliqué

Essayerfind . -type doufind . -type d -ls

essaye ça:

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

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

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top