web-dev-qa-db-fra.com

Comment limiter le nombre de fichiers imprimés par ls?

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.

104
AndreDurao

As-tu essayé

ls -U | head -4

Cela devrait ignorer le tri, ce qui explique probablement pourquoi ls prend si longtemps.

https://stackoverflow.com/questions/40193/quick-ls-command

125
niko

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.

4
AFresh1

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 lsaussi trie cette liste).

3
$ 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
0
Ramandeep Singh

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?

0
user unknown
ls -lrth | tail

ls -lrth | tail -n 10

ls -lrth | grep *.gz | tail
0
Abhishek