Existe-t-il un moyen de limiter le nombre de fichiers répertoriés dans une ls
commande?
J'ai vu:
ls | head -4
mais pour obtenir head
ou tail
pour être exécuté, il faut attendre la ls
fin de l'exécution, ainsi que pour les répertoires contenant une quantité énorme de fichiers pouvant prendre un temps considérable.
Je souhaite exécuter une ls
commande qui limite sans utiliser cette head
commande.
command-line
ls
limit
AndreDurao
la source
la source
ls -U
ne lit pas nécessairement tout le répertoire avant impression. Essayezstrace -e getdents,write ls -U > /dev/null
dans un grand répertoire par exemple.Si votre version de
ls
a un moyen de ne pas trier les fichiers, comme-U
pour GNU ls , utilisez-la. Avec aucune option,ls
tout d'abord lire tous les fichiers, puis trier les noms, puis commence à imprimer.Une autre possibilité consiste à exécuter
find
, ce qui permet d’imprimer les noms au fur et à mesure qu’ils les trouvent.(notez que depuis
head
travaille sur des lignes , cela suppose que les noms de fichiers ne contiennent pas de caractères de nouvelle ligne).la source
find
(par opposition à busybox ou heirloomfind
ou GNUls -U
), il semble que tout le répertoire soit lu avant de commencer à imprimer.Peut-être avez-vous besoin d'un outil autre que
ls
?Par exemple, Randal Schwartz a écrit une entrée de blog sur l’ utilisation
perl
d’annuaires volumineux pouvant contenir des astuces pour créer quelque chose qui réponde à vos besoins.Dans le blog affichage Randal explique que les deux
ls
et unefind
tentative de lecture dans toutes les entrées de répertoire avant l' impression de tout, alors que laperl
solution qu'il propose ne fonctionne pas.la source
perl
utilise probablementreaddir(3)
commels
oufind
.readdir(3)
sur les versions actuelles de GNU / Linux au moins, l’appelgetdents()
système est appelé avec un grand nombre (cela optimise en général les performances en réduisant le nombre d’appels système effectués). Mais dans votre cas, si vous voulez moins de fichiers, il semble que vous deviez contournerreaddir
et utiliser à la place des BSDgetdirentries(3)
ou l'getdents(2)
appel système.Si les performances ne sont pas la préoccupation (comme dans la question qui a été fermée en tant que duplicata de celle-ci), et que vous souhaitez répertorier les n premiers fichiers (par opposition aux n premières lignes de la sortie de
ls
) dans la liste des fichiers non fichiers cachés triés par nom de fichier, aveczsh
, vous pouvez utiliser:pour lister les 4 premiers fichiers.
zsh
Toutefois, même si vous lui dites de ne pas trier*(oN[1,4])
(notez que cette liste estls
également triée), le contenu complet du répertoire reste lu .la source
Peut-être que moins est mieux adapté à vos besoins?
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 délai 1s est fausse, mais dépend peut-être de votre saveur Unix ou de votre shell, de moins ou de la commande head.
Sous Linux, avec GNU-ls,
commence à sortir immédiatement pour moi, pendant que toute la sortie est en cours d'exécution - elle n'est donc définitivement pas terminée, avant que moins commence. Vous pouvez vérifier si vous avez un retard constant de 1 ou peut-être plus, en fonction de la sortie ou non.
Je suppose que votre retard a une raison différente, peut-être que le disque dur va se coucher et a besoin d’un réveil?
Avez-vous un tel délai pour très peu de fichiers aussi?
la source
ls
final. Je cherchais un moyen de limiter moi-même les résultats.la source
ls
commande sur bash. Les canalisations de commandes telles quegrep
,head
,tail
ou autres sont exécutées après lals
fera la tâche de récupérer les premiers
n
fichiers.n
est le nombre de fichiers que vous voulez extraire. code complet sera donc:la source
ls | cut -f 1,n file
commande que vous avez suggérée afficherait les premier et nième champs de chaque ligne de textefile
et ignorerait complètement la sortiels
. Cela ne fait pas ce dont l'affiche originale a besoin.