Vous dites que " ls passe à la tête prend beaucoup de temps pour terminer".
La cause n'est pas ls
, mais le nombre de fichiers dans votre répertoire. Si vous avez 100 000 fichiers dans un seul répertoire, tout moyen de résoudre ce problème devrait obtenir des informations sur les 100 000 fichiers avant même de penser à les trier ou à imprimer une sortie.
Si cela prend trop de temps, la vraie solution est de diviser les fichiers sur plusieurs répertoires.
Si vous ne pouvez pas répartir les fichiers sur plusieurs répertoires, existe-t-il un moyen de réduire le nombre de fichiers à considérer ? Par exemple, si les noms de fichiers incluent une date, vous pouvez peut-être inclure un caractère générique afin que le système n'ait pas à trier 100 000 fichiers. Ou peut-être qu'ils sont numérotés séquentiellement? (Cela peut ou peut ne pas aider, mais cela vaut la peine d'essayer.)
Combien de fois essayez-vous de faire cela? Peut-être que cela vaut la peine de sauvegarder / mettre en cache la sortie pour la réutiliser .
Maintenant, une question.
Êtes-vous sûr de vouloir dire «heure de création» et non pas «heure de changement» ? La plupart des outils ne peuvent afficher que le "temps de changement", pas le "temps de création".
Obtenir le «temps de création» est une toute nouvelle chose, qui nécessite un système de fichiers ext4 et certains outils qui ne sont pas faciles à installer.
Si vous voulez changer l'heure
Changer l'heure (ctime pour faire court) signifie l'heure de la dernière modification des attributs du fichier.
ls -c
trie par ctime.
Vous voulez que la sortie soit dans l'ordre croissant et non décroissant, vous devez donc inverser la sortie avec l' -r
option également.
Vous pouvez donc le faire comme ceci:
ls -cr | head -n 100
Une solution plus longue au même problème en utilisant stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
mais cela fonctionne plus lentement que ls -cr
sur mon système.
Si vous voulez du temps de modification
L'heure de modification (mtime pour faire court) signifie l'heure à laquelle le contenu du fichier a été modifié pour la dernière fois.
ls -t
trie par mtime.
Passez ls -cr
à ls -tr
(meilleure option) ou passez stat -c $'%Z\t%n'
à stat -c $'%Y\t%n'
.
Si vous avez besoin de temps de création
(crtime pour faire court)
C'est plus difficile.
Tout d'abord, assurez-vous que le répertoire se trouve sur un système de fichiers formaté à l'aide de ext4
. Vous pouvez utiliser tune2fs -l <device name>
pour vérifier cela.
Ensuite, il existe un nouveau stat
format appelé %W
, qui peut vous aider ici. Pour l'obtenir, vous devrez télécharger une version de GNU Coreutils sortie en octobre 2010 ou après, l'extraire, la compiler et l'installer.
Ensuite, selon votre noyau, cela pourrait fonctionner (je ne l'ai pas essayé).
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Voir également:
Si vous obtenez des erreurs "'$\t'
La '$\t'
notation nécessite bash
ou zsh
: elle ne fonctionnera pas dans dash
ou sh
sur Ubuntu. Si vous avez vraiment besoin d'utiliser ces shells, vous devrez remplacer n'importe quel \t
par Ctrl+ V, Tabet supprimer le $
début juste avant le devis d'ouverture.
find -mtime +<number of days> -delete
nettoyer tous les fichiers plus anciens qu'un certain âge. Cela signifie qu'aucun tri n'est nécessaire.