Evitar saltos de linea en espacios (for de bash)

355 views
Skip to first unread message

digitalfredy

unread,
Mar 21, 2006, 2:14:20 PM3/21/06
to sl-prog
Saludo
al ejecutar este sencillo script tengo problema con los nombres de archivos que usan espacios por que cada espacio lo bota como un salto de linea,

 ¿como puedo evitar esto?

#!/bin/bash

for i in $(find -name archivo);do
echo $i
done


--
ATT: Fredy P.
es.wikipedia.org - La mejor enciclopedia del mundo!
Suerte and F.S.Fv.
_________________________________________________________________________
F.S.Fv. es acronimo de Free Software Forever

Manuel Alejandro Cerón Estrada

unread,
Mar 21, 2006, 2:45:42 PM3/21/06
to sl-...@googlegroups.com
Hola Fredy,

Una opción podría ser usar read en un while para saltarse los nombres
de espacio, algo así:

find -name archivo | while read NAME
do
echo $NAME
done

El 21/03/06, digitalfredy<digita...@gmail.com> escribió:


--
· Manuel Alejandro Cerón Estrada
· cero...@gmail.com
· http://ceronman.blogspot.com

digitalfredy

unread,
Mar 26, 2006, 1:43:21 PM3/26/06
to sl-...@googlegroups.com
Gracias manuel, pero ahora tengo otro problema, en lugar de echo quiero usar rm, trate de usar sed para cambiar " " por "\ " pero no me funciona :(

alguien recomienda algún buen documento con información sobre  como evitar en scripts de bash problemas con espacios y saltos de linea en flujos cadenas, cadenas como argumentos ...

Óscar López

unread,
Mar 26, 2006, 4:57:08 PM3/26/06
to sl-prog
Hola, Fredy.

No me quedó claro un detalle: ¿quiere que su script borre los
archivos *y* los directorios que encuentre `find'? . A continuación va
una posible solución a su problema que tiene en cuenta este caso y
sólo borra los archivos; si también quiere borrar directorios, quite
el `if' y pásele `-fR' como parámetro a `rm' :

#! /bin/bash

# suponga que ha creado estos archivos y directorios:

touch "archivo uno" "archivo dos"
mkdir "archivo tres" "archivo cuatro"

# ahora, quiere borrar todos los archivos que coincidan con el patrón
'archivo*'

find -name 'archivo*' |
while read file
do
if [ -f "$file" -a ! -d "$file" ]
then
rm -f "$file"
fi
done

-Óscar López, "TYR".

digitalfredy

unread,
Mar 27, 2006, 6:29:52 PM3/27/06
to sl-...@googlegroups.com
"$file" esa era la solicion a mis problemas, gracias!!!!!!

Reply all
Reply to author
Forward
0 new messages