¿Cambiar el nombre de los caracteres dentro de un archivo específico usando find y variables?

0

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/mediay cambiarle el nombre h264a 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 renamecomando (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 findy 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.

allemtura
fuente
Debe usar comillas dobles si desea que las variables sean reemplazadas por sus valores.
dsstorefile1
Ahh, por supuesto, gracias! Mi solución es la siguiente:rename "s/${fileh264}/${filemp4}/" ${mediapath}/*${fileh264}*
Allemtura

Respuestas:

1

La solución es que necesitaba comillas dobles:

rename "s/${fileh264}/${filemp4}/" ${mediapath}/*${fileh264}*
allemtura
fuente
1
Dinos que este es el cambio de nombre de Perl, puede ser otro comando en algunas distribuciones
Gilles Quenot
0

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.

Bagazo
fuente