GNU/Linux >> Tutoriales Linux >  >> Linux

Sed canalizado no funciona en el nombre de archivo encontrado dentro de la sustitución del comando Bash cuando se invoca desde Find "-exec"?

Esta pregunta ya tiene respuestas aquí :if command in find -exec

(2 respuestas)
Cerrado hace 11 meses.

Parece que "find", "bash" y "sed" en algunos casos no funcionan como uno espera.

El siguiente ejemplo debe crear primero el archivo 'sample.txt', luego encontrar el archivo y finalmente procesarlo con el comando '-exec'. El comando ejecutado imprime el nombre de archivo encontrado, las muestras de prueba y el nombre de archivo modificado. El comando 'sed' en sí mismo se usa para reemplazar 'txt' a 'TXT'.

touch sample.txt
find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") ;

El resultado esperado es:

./muestra.txt Muestra_antes.TXT ./muestra.TXT Muestra_después.TXT

En su lugar, produce:

./muestra.txt Muestra_antes.TXT ./muestra.txt Muestra_después.TXT

(el ejemplo ha sido probado también con la sustitución de comandos de la vieja escuela a través de comillas inversas '`' con el mismo resultado)

¿Qué estoy haciendo mal?

Respuesta aceptada:

La sustitución del comando se ejecuta antes de find incluso comienza. El comando real ejecutado (después de sustituciones, expansiones y eliminaciones de cotizaciones, etc.) es

find ./ -maxdepth 1 -name *.txt -exec echo {} Specimen_before.TXT {} Specimen_after.TXT ;

Si necesita ejecutar cualquier cosa fantasía (tuberías o comandos múltiples) con -exec , luego inicie un shell separado para hacerlo:

find . -maxdepth 1 -type f -name '*.txt' 
    -exec sh -c 'printf "%s " "$1"; printf "%s %s %sn" "before.txt" "$1" "after.txt" | sed "s/txt/TXT/g"' sh {} ';'

Linux
  1. ¿Por qué no funciona el autocompletado cuando se escribe un nombre de comando después de `fuente`?

  2. ¿Comando no encontrado en Zsh, pero encontrado en Bash?

  3. bash:netstat:comando no encontrado.

  4. encontrar:comando no encontrado

  5. bash - comando make no encontrado

Solución de problemas del error "Bash:Comando no encontrado" en Linux

El script Bash imprime Command Not Found en líneas vacías

bash sh - comando no encontrado

GLIBCXX_3.4.9 no encontrado al ejecutar ffmpeg desde php en el servidor lampp

La coincidencia de patrones no funciona en el script bash

comando no encontrado al usar sudo