ejemplos bash unix if-statement echo xargs

bash - ejemplos - xargs rm



xargs-if condition y echo{} (4)

Tengo algunos archivos que contienen una cadena en particular. Lo que quiero hacer es buscar una ubicación para el archivo; si el archivo existe grep para el patrón; si es cierto, haz algo.

find -iname file.xxx| xargs -I {} if grep -Fq "string" {} ; then echo {} ; fi

Los problemas son:

  • xargs no está trabajando con la instrucción if.
  • echo {} no da el nombre del archivo, en cambio da {} .

¿Cómo puedo arreglar esto?


Envuelva el enunciado if en una llamada a sh:

find -iname file.xxx | xargs -I {} sh -c ''grep -Fq "string" {} && { echo {}; }''

Use un ciclo while en lugar de xargs

find -iname file.xxx | while read -r file; do if grep -Fq "$file"; then # do something echo "$file" fi done

Supongo que quieres hacer más que repetir el nombre del archivo. Si eso es todo lo que intentas hacer, utiliza la opción -l de grep:

find -iname file.xxx | xargs grep -Fl "string"


Intenta ejecutar el comando a través de un shell como este:

$ find -iname file.xxx | > xargs -I {} bash -c ''if grep -Fq "string" {} ; then echo {} ; fi''

donde el comando original ha sido rodeado por comillas y bash -c .


Primero, if es un comando bash y no hay un programa ejecutable. xargs por otro lado, necesita un programa distinto.

Segundo, el ; los personajes probablemente estén dividiendo el comando. Tendrás que escapar de ellos para llevarlos a xargs.

Para evitar todo esto, sugiero lo siguiente:

for i in `find -iname file.xxx` ; do grep -Fq "string" $i && echo $i ; done


find -iname file.xxx | while read FILE; do if grep -Fq "string" $FILE ; then echo $FILE ; done