Manejar nombre de archivo con espacios dentro de Bash-script


4

En mi Bash-script tengo que manejar nombres de archivos con espacios. Estas son las líneas importantes dentro de mi script:

mp3file="/media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3"
echo "Command: mp3info -x `echo $mp3file`"
mp3info -x `echo $mp3file`

Desafortunadamente, el comando no funciona, porque el nombre del archivo está dividido:

mp3info: invalid option -- '\'
mp3info: invalid option -- '\'
Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\: No such file or directory
Error opening MP3: Vol.5\: No such file or directory
Error opening MP3: \[MP3PRO\]/01\: No such file or directory
Error opening MP3: Nofx\: No such file or directory
Error opening MP3: Pump\: No such file or directory
Error opening MP3: up\: No such file or directory
Error opening MP3: the\: No such file or directory
Error opening MP3: Valium.mp3: No such file or directory

También intenté agregar un IFS personalizado mientras leía en algunos foros:

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
# Script like above
IFS=$SAVEIFS

Pero de esta manera, estoy recibiendo el error.

Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3: No such file or directory

Lo intenté hace un tiempo, pero no consigo que mi script funcione. Lo que es extraño es que si ejecuto el mismo comando que mi script debería crear manualmente (haciéndolo eco dentro de mi script) en el Shell, realmente funciona. Pero no dentro de mi guión. ¿Alguna pista?


1
No sé qué es un retroceso en IFS se supone que debe hacer (no importa sobre el retroceso, me di cuenta de que podría ser cualquier personaje y está ahí para preservar la nueva línea que de lo contrario se eliminaría), pero puede configurar IFS sin uso echo: IFS=$'\n'. Además, en un lugar estás usando backticks y en otro lugar estás usando $(). los $() Se prefiere la forma ya que es más legible, se puede anidar fácilmente, etc.
Dennis Williamson

Respuestas:


9

Envuelva los nombres de las variables entre comillas:

mp3file="/media/music/Punk-O-Rama Vol.5 \[MP3PRO\]/01 - Nofx - Pump up the Valium.mp3"
echo "Command: mp3info -x \"$mp3file\""
mp3info -x "$mp3file"

También quité lo superfluo echo Comandos y escapar que no es necesario.


Gracias, funciona! No sé por qué insistió en preservar tanto escapar;)
ifischer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.