¿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.


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}*

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.

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.