使用查找和变量重命名特定文件中的字符?

使用查找和变量重命名特定文件中的字符?

我有一个如下所示的文件:

/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).

我也尝试过使用findand 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所说,正确的方法是使用双引号来正确解释变量。

相关内容