찾기 및 변수를 사용하여 특정 파일의 문자 이름을 바꾸시겠습니까?

찾기 및 변수를 사용하여 특정 파일의 문자 이름을 바꾸시겠습니까?

다음과 같은 파일이 있습니다.

/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가 말했듯이 올바른 방법은 큰 따옴표를 사용하여 변수를 올바르게 해석하는 것입니다.

관련 정보