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)