Problema con saltos de línea en un script bash

Hola.

Veréis, creo que soy un poco malo con "sed" o no encuentro el problema concreto. Después de investigar casi toooda la noche (joder, si no he dormido!!!) he encontrado el modo de pasar las imágenes de mi móvil a mi linux sin abrir windows, aunque no he encontrado ningún programa con GUI que me sirva (obextools sólo puede pasar imágenes de una en una), así que me estoy haciendo un script bash.

A ver si me ayudáis a conseguirlo, así me quitaría el windows que uso con vmware, el último vestigio de microsoft en mi ordenador.

Seguro que es un fallo tonto, pero no me maltratéis mucho, que estoy aprendiendo [ayay]

El script se descarga la lista de archivos del móvil y la trata dejando en un fichero de texto la lista de las imágenes, una en cada línea. Ahora se trata de leer cada línea y descargar la imagen. Pues bien, si pongo la imagen a mano, va, pero con el script no, parece ser que lee del fichero de texto no sólo el nombre de la imagen sino también el salto de línea del final.

Tengo el fichero así:

DSC00605.JPG
DSC00584.JPG
DSC00585.JPG
...

Y quiero que quede así:

DSC00605.JPG DSC00584.JPG DSC00585.JPG ...

Pero no lo consigo. Sería sustituir el salto de línea por un espacio, pero con "sed 's/\n/ /'g lista.lst > lista2.lst" no consigo nada.

Os pongo el código (aunque me da "vergu"):

#!/bin/bash

#creo la carpeta y entro
cd ~/Desktop
mkdir imagenes_movil
cd imagenes_movil

#descargo la lista de imágenes
obexftp -t /dev/ttyACM0 -c Pictures -c camera_semc -c 100MSDCF -l | grep file > lista0.lst
## por hacer: comprobar si ha habido error, si el fichero lista0.lst está vacío

#dejo en el fichero sólo los nombres de las imágenes
sed 's/<file name="//g' lista0.lst | sed 's/" size="[0-9]*"\/>//g' > lista.lst
rm lista0.lst

CONTADOR=0
echo " "
echo " Todo correcto, espera mientras se descargan las imágenes."
sleep 2s

for i in $( cat lista.lst ); do
obexftp -t /dev/ttyACM0 -c Pictures -c camera_semc -c 100MSDCF -g $i
##por hacer comprobar si se ha descargado
#ls -s -h $i
let CONTADOR=CONTADOR+1
sleep 2s
done

echo "$CONTADOR imágenes descargadas en $(pwd)"


Os pongo también el fichero que saca el script, en este enlace: lista.lst

Un saludo y muchísimas gracias.
Si quieres eliminar los saltos de línea con sed tienes que hacer algo de este estilo:

sed -n -e '1x;1!H;${x;s-\n- -gp}' fichero


Pero tu lo que quieres es:

while read f ; do
    # haz algo con la linea
done < lista.lst


Como curiosidad nunca uses:

$(cat algo)


Utiliza:

$(< algo)


Es infinitamente más rápido. De hecho es RARA la vez que hay que usar cat en un shell script. Siempre hay mejores alternativas.

Y tampoco uses 'let', es feo. Usa:

((CONTADOR++))


Suerte.

- ferdy
Bueno, iba a responderte, pero mientras probaba mi chorra-script, se me ha adelantado Ferdy. xD

Un saludo.
¿Has probado kmobiletools? Supongo que estarás conectándote por cable y por eso usas obexftp. Si tienes bluetooth, KDE funciona perfectamente con los móviles bluetooth ;-)
Churly, sí lo he probado sí, pero con ése programa no puedo descargar los archivos, sólo ver la agenda, lo demás no me lo coge. No tengo bluetooth en el ordenador, y uso gnome.

Gracias bastian por responder :)

Y muchas gracias Ferdy, no se me habría ocurrido en la vida usar el read así, cuántas cosas se pueden hacer, anda que no me queda por aprender.

De todos modos tampoco funcionaba, al sacar el fichero tal cual lo muestra el móvil tal vez haya caracteres "extraños" (para mí) al final de cada línea porque no me encontraba ningún archivo en el móvil.

Pero ya lo he solucionado, tengo el fichero como lo quiero con:
#descargo la lista de imágenes
obexftp -t /dev/ttyACM0 -c Pictures -c camera_semc -c 100MSDCF -l | grep -o DSC[0-9]*.JPG > lista.lst


Me ha quedado más sencillo, no sé si es lo mejor, pero oye, funciona :).

Ahora sólo me queda hacer que compruebe si se han descargado todos de la lista, creo que ya me las apaño bien.

Un saludo y gracias de nuevo :)

Editado:

Ya está :) Así que lo pongo por si a alguien le viene bien.

Está hecho para funcionar con el Sony-Ericsson K608i y descargar las imágenes hechas con la cámara, es decir, de la carpeta donde se guardan las fotos hechas. Es muy sencillito. El problema es que el idioma del móvil tiene que ser inglés, no funciona en español por el acento en "Imágenes". Se puede cambiar para otros idiomas o carpetas pero sólo descarga las imágenes .JPG, que es para lo que lo quiero.

#!/bin/bash
# Samuel Gracia Iranzo
# [url]http://www.amuchamu.com[/url]
# 26/08/2006

#creo la carpeta y entro
cd ~/Desktop
mkdir imagenes_movil
cd imagenes_movil

# descargo la lista de imágenes. El móvil tiene que estar en inglés y descarga las
# imágenes hechas con la cámara de la ruta /Pictures/camera_semc/100MSDCF
# para cambiarlo sólo hay que cambiar las -c carpeta -c subcarpeta etc
# no funciona en español por el acento de "Imágenes"
obexftp -t /dev/ttyACM0 -c Pictures -c camera_semc -c 100MSDCF -l | grep -o DSC[0-9]*.JPG > lista.lst

CONTADOR=0
while read f ; do
   until ( ls | grep -c $f > /dev/null ) do
      # descarga y borra. si se quieren dejar cambiar -G por -g
      obexftp -t /dev/ttyACM0 -c Pictures -c camera_semc -c 100MSDCF -G $f > /dev/null
   done
   ((CONTADOR++))
done < lista.lst

echo " "
echo "TERMINADO. $CONTADOR imágenes descargadas :)"
4 respuestas