A solução é que eu precisava de aspas duplas:
rename "s/${fileh264}/${filemp4}/" ${mediapath}/*${fileh264}*
Eu tenho um arquivo que se parece com o seguinte:
/var/www/html/media/2018@03@01@vi_0005_20180301_110203.h264.v0005.th.jpg
.
Eu gostaria de encontrar este arquivo em /var/www/html/media
e renomear h264
para mp4 dentro de um script bash executado a partir de uma pasta diferente.
Minhas variáveis são:
mediapath="/var/www/html/media"
filemp4=vi_0005_20180301_110203.mp4
fileh264=vi_0005_20180301_110203.h264
Eu tentei o comando rename
(que funciona sem variáveis), mas ele reclamou ao usá-los. Eu também não sei como fazer isso aparecer na pasta de mídia.
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).
Eu também tentei usar find
e mv
, mas não tenho certeza de onde está dando errado.
find ${mediapath} -name "*${fileh264}*" -exec bash -c 'mv $0 ${0/${fileh264}/${filemp4}}' {} \;
Qualquer ajuda seria muito apreciada! Obrigado.
A solução é que eu precisava de aspas duplas:
rename "s/${fileh264}/${filemp4}/" ${mediapath}/*${fileh264}*
As citações podem ser um problema no bash.
Você deve ter em mente que uma única cota não interpreta nada.
Um $
é interpretado como um ASCII $
e não como o início de uma variável.
Você pode combinar diferentes formas de cotações para atingir metas diferentes. Eu recomendaria verificar o seguinte link e ler a seção "Citações strongs". link
Como disse @allemtura, a maneira correta é usar doublequotes para interpretar as variáveis corretamente.