(EDIT en solución con SED)Bash escapa y comodines tilde pero no el espacio
Tengo una lista de nombres de archivos y directorios, incluyendo tilde y comodines. Ej .:
~/docs/file.*
~/my docs/*.txt
...
He leído las filas y pasarlos a un comando (por ejemplo, rsync):
while read ROW
do
rsync $ROW /my/dest/
done < list.txt
El problema está manejando con espacios en los nombres de archivo. Si pongo $ FILA entre comillas dobles como esto
rsync "$ROW" /my/dest/
por supuesto golpe no escapa a los comodines ni la tilde. Pero si no uso comillas, el espacio rompe la fila.
Una posible solución es cambiar IFS (cuidadosamente: el script es más complicado que el que informé). Otra solución (gracias por la solución a Patrick Echterbruch) es escaparse de los espacios. Sin embargo, el siguiente código no funciona para mí:
while read ROW
do
export NEWROW=$(echo $ROW | sed -e 's/ /\\ /g')
echo "Value: $NEWROW"
ls -1d $NEWROW
done < list.txt
Tenga en cuenta que no se pasan las comillas a ls. existe el archivo "~/a b c/test.txt", pero me da:
Value: ~/saver/a\ b\ c/*.txt
ls: impossibile accedere a ~/saver/a\: Nessun file o directory
ls: impossibile accedere a b\: Nessun file o directory
ls: impossibile accedere a c/*.txt: Nessun file o directory
parece que newRow se pasa a ls como una cadena, por lo que los comodines no se expanden pero el espacio sigue rompiendo el nombre del archivo, aunque escapó.
¿Algún consejo? Gracias.
Consulte [sobre la expansión de tilde] (http://mywiki.wooledge.org/BashPitfalls#echo_.22.2BAH4.22). –