GNU/Linux >> Tutoriels Linux >  >> Linux

Comment arrêter la commande de recherche après la première correspondance ?

Existe-t-il un moyen de forcer la find commande pour s'arrêter juste après avoir trouvé la première correspondance ?

Réponse acceptée :

Avec GNU ou FreeBSD find , vous pouvez utiliser le -quit prédicat :

find . ... -print -quit

Le find de NetBSD équivalent :

find . ... -print -exit

Si tout ce que vous faites est d'imprimer le nom, et en supposant que les noms de fichiers ne contiennent pas de caractères de saut de ligne, vous pouvez faire :

find . ... -print | head -n 1

Cela n'empêchera pas find après le premier match, mais éventuellement, en fonction du timing et de la mise en mémoire tampon lors du deuxième match ou (beaucoup) plus tard. Fondamentalement, find se terminera par un SIGPIPE lorsqu'il essaiera de sortir quelque chose alors que head est déjà parti car il a déjà lu et affiché la première ligne d'entrée.

Notez que tous les shells n'attendront pas cette find commande après head est revenu. Le shell Bourne et les implémentations AT&T de ksh (lorsqu'il n'est pas interactif) et yash (uniquement si ce pipeline est la dernière commande d'un script) ne le ferait pas, le laissant s'exécuter en arrière-plan. Si vous préférez voir ce comportement dans n'importe quel shell, vous pouvez toujours modifier ce qui précède en :

(find . ... -print &) | head -n 1

Si vous ne vous contentez pas d'imprimer les chemins des fichiers trouvés, vous pouvez essayer cette approche :

find . ... -exec sh -c 'printf "%sn" "$1"; kill "$PPID"' sh {} ;

(remplace printf avec tout ce que vous feriez avec ce fichier).

Cela a pour effet secondaire de find renvoyant un statut de sortie reflétant le fait qu'il a été tué.

En fait, en utilisant le signal SIGPIPE au lieu de SIGTERM (kill -s PIPE au lieu de kill ) rendra certains shells plus silencieux à propos de cette mort (mais renverra toujours un statut de sortie non nul).


Linux
  1. Comment auditer les autorisations avec la commande find

  2. Comment rechercher des fichiers dans CentOS 8 sur la ligne de commande

  3. Comment utiliser la commande basename ?

  4. Comment le caractère générique * est-il interprété comme une commande ?

  5. Comment compter le nombre de lignes dans un fichier après une correspondance Grep ?

Comment rechercher des fichiers sous Linux avec la commande Find

Comment trouver des fichiers sur la ligne de commande Ubuntu

Comment rechercher des fichiers avec la commande fd sous Linux

Comment exclure un répertoire dans find . commande

Comment trouver les répertoires ou fichiers les plus gourmands en espace ?

Comment obtenir la n-ième ligne après une grep?