次のファイルがあります。
/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
何が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が言ったように、正しい方法は二重引用符を使用して変数を正しく解釈することです。