Linux/Unix Shell Scripting - Capturar nombre completo de un fichero cuando tiene espacios

 
Vista:
sin imagen de perfil
Val: 50
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Capturar nombre completo de un fichero cuando tiene espacios

Publicado por caic (99 intervenciones) el 21/07/2014 11:37:17
Hola,

Tengo un script que busca unos ficheros y realiza una serie de acciones sobre cada uno de ellos llamando a una función:

1
2
3
4
for EAR in $(find $PROFILE -type f -name "$PREFIJO*.ear")
      do
        version $EAR
      done
Sin embargo, si el nombre de algún fichero contiene espacios el for envía a la función version el nombre del fichero por trozos. Por ejemplo, para un fichero llamado "fichero con espacios.ear" se hacen 3 llamadas a la función: una con fichero, otra con con y otra con espacios.ear.

¿Alguna idea de como evitar esto?

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 104
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Capturar nombre completo de un fichero cuando tiene espacios

Publicado por xve (309 intervenciones) el 21/07/2014 15:41:11
Hola Caic, para ello, ponlo entre comillas, algo así:
1
for EAR in "$(find $PROFILE -type f -name '$PREFIJO*.ear')"

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 50
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Capturar nombre completo de un fichero cuando tiene espacios

Publicado por caic (99 intervenciones) el 21/07/2014 17:55:35
Hola,

Muchas gracias por tu respuesta pero no funciona. Ahora el find no devuelve ningún resultado. Tengo la impresión de que esto no le gusta:

1
'$PREFIJO*.ear'


Puede que no tome el valor de la variable PREFIJO y al tomarlo como literal no encuentra nada.

En cuanto saque un rato haré más pruebas.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 104
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Capturar nombre completo de un fichero cuando tiene espacios

Publicado por xve (309 intervenciones) el 21/07/2014 18:24:02
Yo la prueba que he realizado ha sido esta, ya que no dispongo del valor de tus variables:

1
2
3
4
for EAR in "$(find *.txt -type f)"
do
	echo "$EAR"
done

Hay archivo con un nombre con espacios y me los muestra correctamente...

Has probado sin '$PREFIJO*.ear'?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Capturar nombre completo de un fichero cuando tiene espacios

Publicado por Tom (361 intervenciones) el 22/07/2014 10:58:22
Entre comillas simples, el shell no va a expandir la variable PREFIJO ... así que no, eso no funcionará :)
Prueba con algo como esto:

1
2
3
4
find $PROFILE -type f -name "$PREFIJO*.ear" | while read EAR
do
  version "$EAR"
done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 50
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Capturar nombre completo de un fichero cuando tiene espacios

Publicado por caic (99 intervenciones) el 22/07/2014 11:20:43
Esta última propuesta funciona!!! :D

1
2
3
4
find $PROFILE -type f -name "$PREFIJO*.ear" | while read EAR
do
  version "$EAR"
done

Además, por si alguien más le ocurre lo mismo, decir que tuve que entrecomillar también el "$1" de la función. El que toma el valor de "$EAR".

Muchas gracias a los dos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar