Quiero encontrar un comando bash que me permita grep cada archivo en un directorio y escribir la salida de ese grep en un archivo separado. Supongo que habría sido hacer algo como esto
ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"
pero, que yo sepa, a xargs no le gustan las comillas dobles. Sin embargo, si elimino las comillas dobles, el comando redirige la salida del comando completo a un solo archivo llamado '{}'. En lugar de a una serie de archivos individuales.
¿Alguien sabe de una manera de hacer esto usando xargs? Acabo de usar este escenario grep como ejemplo para ilustrar mi problema con xargs, por lo que cualquier solución que no use xargs no es tan aplicable para mí.

xargssin-0: esto solo se aplica cuando se canalizafindla salida conxargs, ¿verdad? cuando lo haga, ¿xargs -a <input_file>cómo usaría esto? La mayoría de los comandos tienen gusto degrepsalidas con\ny no.\0.La única forma en que puedo pensartrpara solucionar esto es usar de nuevo para arreglar eso tal vez. Pero, ¿por qué es importante usarlo solo con-0?-0,xargstomará tus nombres de archivo y romperá todos los espacios, comillas y barras invertidas en ellos. Deberías olvidartexargscomo una herramienta. Si tiene líneas, use un bucle bash para iterar las líneas:,while read line; do <command> "$REPLY"; done < file-with-linesocommand | while ...xargsson GNU),xargsdebe evitarse a menos que uno pueda usarlo-0. Gracias.xargs, que no siempre implica el análisislso el usosh -c. Esto no responde la pregunta en lo más mínimo, pero es el primer resultado de Google para la pregunta, solo que aumenta la confusión.xargs -I{} sh -c 'grep ABC "$1" > "$1.out"' -- {}? Especialmente, las reglas de comillas (dobles) incrustadas y el símbolo "-" al final. GraciasUna solución sin
xargses la siguiente:... y el mismo se puede hacer con
xargs, resulta que:Editar : comillas simples agregadas después del comentario de lhunath .
fuente
Supongo que su ejemplo es solo un ejemplo y que puede necesitar> para otras cosas. GNU Parallel http://www.gnu.org/software/parallel/ puede ser su rescate. No necesita comillas adicionales siempre que sus nombres de archivo no contengan \ n:
Si tiene nombres de archivo con \ n:
Como una ventaja adicional, obtiene los trabajos ejecutados en paralelo.
Mire los videos de introducción para obtener más información: http://pi.dk/1
La instalación de 10 segundos intentará hacer una instalación completa; si eso falla, una instalación personal; si eso falla, una instalación mínima:
Si necesita moverlo a un servidor, que no tiene GNU Parallel instalado, intente
parallel --embed.fuente