Je souhaite trier uniquement les fichiers par date de mise à jour, y compris les sous-répertoires.
J'ai découvert ls -lrtR | grep ^-
. mais il ne semble pas trier par date de mise à jour.
Et je dois enregistrer cette liste dans un fichier. C'est possible?
Apr 01 2010 InsideDoosanServiceImpl.class // in A directory
Apr 08 2010 MainController.class // in B directory
Apr 07 2010 RecommendController.class // in B directory
Apr 01 2010 MainDao.class // in B directory
Je veux dire que la liste entière n'est pas classée par date, mais d'abord classée par dossier et classée par date.
Je veux une liste d'abord triée par date incluant tous les sous-répertoires.
ls -lrt
.xargs
à effectuer plusieurs appels àls
, car les fichiers ne sont correctement triés qu'à chaquels
appel mais manquent d'un ordre global cohérent dans la sortie.Avec ls, -R recursera les répertoires et -t triera par modification. Cependant, il parcourt récursivement les répertoires et applique -t à chaque répertoire. Il n'accumule pas tous les fichiers de tous les répertoires, puis les trie. (Pour autant que je comprends, ce dernier est ce que vous voulez)
Avec gnu find (1), vous pouvez spécifier le format de sortie pour inclure le nombre de secondes depuis epoch et le nom de fichier, puis vous pouvez le diriger vers sort (1).
la source
GNU find
ça aide. Mais OP fonctionne sur desAIX
machines etGNU find
n'était donc pas disponible pour lui.ls
ne pas pouvoir accumuler des fichiers avant de les trier.ls
est si rapide par rapport àfind
.ls
etfind
lit les mêmes données, donc je ne peux imaginer aucune raison pour laquelle ls devrait être considérablement plus rapide que find. Sur mon système, la recherche est 5 fois plus rapide (recherche dans environ un demi-million de fichiers)find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txt
donnant des entrées de sortie comme1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt
.