Foros del Web » Administración de Sistemas » Unix / Linux »

Duda programación bash script

Estas en el tema de Duda programación bash script en el foro de Unix / Linux en Foros del Web. Estoy intentando hacer algo muy simple pero como siempre me estoy liando mucho :D Lo que quiero hacer es meter en una variable la lista ...
  #1 (permalink)  
Antiguo 28/03/2011, 02:00
 
Fecha de Ingreso: septiembre-2009
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Duda programación bash script

Estoy intentando hacer algo muy simple pero como siempre me estoy liando mucho :D

Lo que quiero hacer es meter en una variable la lista de ficheros pdf de un directorio para después pasar esa lista de ficheros como parámetros a un programa.

Lo que hice fue:

unset todo;
for i in `ls *.pdf`;
do
todo=$todo" "\"$i\";
done

programa $todo;

Lo que hago es ir concatenando todos los nombres de ficheros e insertar comillas dobles al principio y al final de cada nombre. Esto lo hago por si hay algún fichero que tenga espacios en blanco o paréntesis en el nombre.

El resultado es que no funciona. La cadena se crea bien. Si se hace un echo $todo aparecen todos los nombre correctamente entrecomillados y separados por un espacio pero al pasárselo al programa, no los reconoce como nombre de ficheros.
Da la impresión de que el programa interpreta las " como si fuesen parte del nombre...

¿Alguna idea?
  #2 (permalink)  
Antiguo 29/03/2011, 21:11
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda programación bash script

Código SH:
Ver original
  1. find . -name "*pdf" -exec programa {} +

"buscar todos los archivos con extensión PDF, y para cada uno de ellos ejecutar programa".

+ hace que se construya una línea de comandos tan larga como se pueda, con los nombres de archivo tal y como lo querés.
Si quisieras que programa se ejecute para cada archivo por separado, cambiás el + por \;

creo que

Código SH:
Ver original
  1. xargs programa *.pdf

también funcionaría, pero hay que verificar el asunto de los espacios.


Saludos
  #3 (permalink)  
Antiguo 29/03/2011, 23:32
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda programación bash script

Hola,

Prueba así:

Código:
programa *.pdf
La expansión de nombres de ficheros la hace bash y se encarga de escapar los nombres de los archivos para que no tengan problemas con los caracteres " comillas. Normalmente es algo confuso comparado con DOS, en el caso de DOS el sistema operativo no hace la expansión sino pasa la cadena *.pdf al programa.

En otras palabras lo que va a ver el programa es:

Código:
programa archivo1.pdf archivo\ 2.pdf archivo3.pdf
Saludos,

ps:

Por cierto, el método de AlvaroG debería funcionar correctamente, solamente quería aclarar ese punto de la expansión porque creo que lo estabas confundiendo con el DOS.

Última edición por HackmanC; 29/03/2011 a las 23:42 Razón: ps
  #4 (permalink)  
Antiguo 30/03/2011, 06:55
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda programación bash script

Juas, como tantas otras veces, me olvidé de mencionar la forma más sencilla

Etiquetas: bash, sistemas-unix
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:24.