我有一个如下所示的文件:
/var/www/html/media/2018@03@01@vi_0005_20180301_110203.h264.v0005.th.jpg
。
我想在从不同文件夹运行的 bash 脚本中找到此文件/var/www/html/media
并将其重命名为 mp4。h264
我的变量是:
mediapath="/var/www/html/media"
filemp4=vi_0005_20180301_110203.mp4
fileh264=vi_0005_20180301_110203.h264
我已经尝试过该rename
命令(无需变量即可工作),但在使用它们时它会抱怨。我也不知道如何让它在媒体文件夹中显示。
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).
我也尝试过使用find
and mv
,但我不确定哪里出了问题。
find ${mediapath} -name "*${fileh264}*" -exec bash -c 'mv $0 ${0/${fileh264}/${filemp4}}' {} \;
任何帮助将非常感激!谢谢。
答案1
解决方案是我需要双引号:
rename "s/${fileh264}/${filemp4}/" ${mediapath}/*${fileh264}*
答案2
在 bash 上引用可能是一件连线的事情。
您应该记住,单引号不会解释任何内容。 A$
被解释为 ASCII $
,而不是变量的开头。
您可以组合不同的报价方式来达到不同的目标。我建议检查以下链接并阅读“强引用”部分。 http://wiki.bash-hackers.org/syntax/quoting
正如@allemtura所说,正确的方法是使用双引号来正确解释变量。