Cette autre réponse est quelque peu imparfaite. La commande est
find . -name '*.txt' | head -n 3
Ensuite, il y a une explication dans l'un des commentaires [c'est moi qui souligne]:
head
démarre et attend l'entrée du côté gauche du tuyau. Ensuite find
démarre et recherche les fichiers qui correspondent aux critères spécifiés, envoyer sa sortie par le tuyau. Quand head
a reçu et imprimé le nombre de lignes demandées, il se termine, fermant le tuyau. find
remarque le tuyau fermé et il se termine également. Simple, élégant et efficace .
C'est presque vrai.
Le problème est que find
le tube fermé n'est remarqué que lorsqu'il essaie d'y écrire - dans ce cas, c'est lorsque la 4e correspondance est trouvée. Mais s'il n'y a pas de 4e match, find
cela continuera. Votre coquille attendra! Si cela se produit dans un script, le script attendra, malgré le fait que nous savons déjà que la sortie du tube est finale et que rien ne peut y être ajouté. Pas si efficace.
L'effet est négligeable si ce particulier se find
termine rapidement par lui-même mais avec une recherche complexe dans une grande arborescence de fichiers, la commande peut retarder inutilement tout ce que vous voulez faire ensuite.
La solution pas si parfaite est d'exécuter
( find … & ) | head -n 3
De cette façon, à la head
sortie, le shell continue immédiatement. Le find
processus d' arrière-plan peut alors être ignoré (il se terminera tôt ou tard) ou ciblé avec pkill
ou quelque chose.
Pour prouver le concept que vous pouvez rechercher /
. Nous n'attendons qu'un seul match, mais nous le cherchons find
partout et cela peut prendre beaucoup de temps.
find / -wholename / 2>/dev/null | head -n 1
Arrêtez-le avec Ctrl+ Cdès que vous voyez le problème. Comparez maintenant:
pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
find . -name '*.txt' -print -quit
uniquement afficher la première correspondance et laisserfind
sortir après la première correspondance. Je ne sais pas s'il est possible de s'adapter au cas "sortie après avoir trouvé n correspondances".