検索と変数を使用して特定のファイルの文字名を変更しますか?

検索と変数を使用して特定のファイルの文字名を変更しますか?

次のファイルがあります。

/var/www/html/media/2018@03@01@vi_0005_20180301_110203.h264.v0005.th.jpg

このファイルを見つけて、別のフォルダで実行されているbashスクリプトから/var/www/html/mediamp4に名前を変更したいと思います。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何が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が言ったように、正しい方法は二重引用符を使用して変数を正しく解釈することです。

関連情報