Existe-t-il un moyen de limiter la quantité de fichiers répertoriés sur une commande ls
?
J'ai vu:
ls | head -4
mais pour que head
ou tail
soit exécuté, je dois attendre que ls
se termine, et avec des répertoires contenant une quantité énorme de fichiers qui peuvent prendre un temps considérable.
Je souhaite exécuter une commande ls
qui limite sans utiliser cette commande head
.
As-tu essayé
ls -U | head -4
Cela devrait ignorer le tri, ce qui explique probablement pourquoi ls
prend si longtemps.
Si votre version de ls
a un moyen de ne pas trier les fichiers, comme -U
pour GNU ls , utilisez-le. Sans option, ls
lira d'abord tous les fichiers, puis triera les noms, puis commencera à imprimer.
Une autre possibilité consiste à exécuter find
, qui imprime les noms au fur et à mesure qu'ils les trouvent.
find . -name . -o -Prune | head
(notez que puisque head
travaille sur les lignes , cela suppose que les noms de fichiers ne contiennent pas de caractères de nouvelle ligne).
Vous avez peut-être besoin d'un autre outil que ls
?
Par exemple, Randal Schwartz a une entrée de blog sur en utilisant Perl
sur les grands répertoires qui peut contenir des conseils sur la construction de quelque chose qui répond à vos besoins.
Dans le blog, Randal explique que ls
et find
essaient de lire toutes les entrées du répertoire avant d'en imprimer, contrairement à la solution Perl
qu'il propose.
Si les performances ne sont pas le problème (comme dans la question qui a été fermée en double de celui-ci), et que vous souhaitez lister les n premiers fichiers (par opposition aux n premières lignes de la sortie de ls
) dans la liste des fichiers non cachés triés par nom de fichier, avec zsh
, vous pouvez utiliser:
ls -ld -- *([1,4])
pour lister les 4 premiers fichiers. zsh
lira toujours le contenu complet du répertoire, même si vous lui dites de ne pas trier avec *(oN[1,4])
(notez que ls
aussi trie cette liste).
$ cut -f 1,n filename
fera la tâche de récupérer les premiers n
fichiers. n
est le nombre de fichiers que vous souhaitez extraire. le code si complet sera:
$ ls|cut -f 1,n file
moins est peut-être mieux adapté à vos besoins?
ls /usr/bin | less
Pour moi, cela fonctionne instantanément sur un ordinateur portable de 5 ans avec un disque dur classique, mais la tête est tout aussi rapide.
Vous pouvez terminer less
prématurément avec q.
Je suppose que votre hypothèse sur la source du retard de 1 est erronée, mais dépend peut-être de votre saveur Unix ou de votre commande Shell, less ou head.
Sous Linux, avec GNU-ls,
ls -R /usr | less
commence à sortir immédiatement pour moi, alors que la sortie entière est en cours d'exécution - elle n'est donc définitivement pas terminée, avant que moins de démarrages. Vous pouvez vérifier si vous avez un retard constant de 1s ou plus, selon la sortie ou non.
Je suppose que votre retard de 1 a une raison différente, peut-être que le disque dur va dormir et a besoin d'un réveil?
Avez-vous également un tel délai pour très peu de fichiers?
ls -lrth | tail
ls -lrth | tail -n 10
ls -lrth | grep *.gz | tail