Tengo un archivo que se parece a lo siguiente:
/var/www/html/media/2018@03@01@vi_0005_20180301_110203.h264.v0005.th.jpg
.
Me gustaría encontrar este archivo /var/www/html/media
y cambiarle el nombre h264
a mp4 dentro de un script bash que se ejecuta desde una carpeta diferente.
Mis variables son:
mediapath="/var/www/html/media"
filemp4=vi_0005_20180301_110203.mp4
fileh264=vi_0005_20180301_110203.h264
He probado el rename
comando (que funciona sin variables), pero se quejó al usarlos. Tampoco estoy seguro de cómo hacer que se vea en la carpeta multimedia.
rename 's/${fileh264}/${filemp4}/' *${fileh264}*
Global symbol "$mediapath" requires explicit package name (did you forget to declare "my $mediapath"?) at (user-supplied code).
Global symbol "$fileh264" requires explicit package name (did you forget to declare "my $fileh264"?) at (user-supplied code).
Global symbol "$mediapath" requires explicit package name (did you forget to declare "my $mediapath"?) at (user-supplied code).
Global symbol "$filemp4" requires explicit package name (did you forget to declare "my $filemp4"?) at (user-supplied code).
También he intentado usar find
y mv
, pero no estoy seguro de dónde va mal.
find ${mediapath} -name "*${fileh264}*" -exec bash -c 'mv $0 ${0/${fileh264}/${filemp4}}' {} \;
Cualquier ayuda sería muy apreciada! Gracias.
rename "s/${fileh264}/${filemp4}/" ${mediapath}/*${fileh264}*
Respuestas:
La solución es que necesitaba comillas dobles:
fuente
Citar puede ser una cosa cableada en bash.
Debe tener en cuenta que una sola cita no interpreta nada. A
$
se interpreta como un ASCII$
y no como el comienzo de una variable.Puede combinar diferentes formas de cotizaciones para alcanzar diferentes objetivos. Recomendaría consultar el siguiente enlace y leer la sección "Citas fuertes". http://wiki.bash-hackers.org/syntax/quoting
Como dijo @allemtura, la forma correcta es usar comillas dobles para interpretar las variables correctamente.
fuente