Saltar al contenido

bash encuentra xargs grep solo una sola ocurrencia

Estate atento porque en este tutorial encontrarás la respuesta que buscas.

Solución:

Simplemente manténgalo dentro del ámbito de find:

find . -type f -exec grep "something"  ; -quit

Así es como funciona:

los -exec funcionará cuando el -type f estarán true. Y porqué grep devoluciones 0 (éxito/true) cuando el -exec grep "something" tiene un partido, el -quit se activará.

find -type f | xargs grep e | head -1

hace exactamente eso: cuando el head termina, el elemento medio de la tubería es notificado con una señal de ‘tubería rota’, termina a su vez y notifica al find. Debería ver un aviso como

xargs: grep: terminated by signal 13

lo que confirma esto.

Para hacer esto sin cambiar de herramienta: (me encanta xargs)

#!/bin/bash
find . -type f |
    # xargs -n20 -P20: use 10 parallel processes to grep files in batches of 20
    # grep -m1: show just on match per file
    # grep --line-buffered: multiple matches from independent grep processes
    #      will not be interleaved
    xargs -P10 -n20 grep -m1 --line-buffered "$1" 2> >(
        # Error output (stderr) is redirected to this command.
        # We ignore this particular error, and send any others back to stderr.
        grep -v '^xargs: .*: terminated by signal 13$' >&2
    ) |
    # Little known fact: all `head` does is send signal 13 after n lines.
    head -n 1

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *