한 줄에 Bash 여러 이름 바꾸기: 가능합니까?

한 줄에 Bash 여러 이름 바꾸기: 가능합니까?

Bash를 사용하여 즉시 이름을 바꾸고 교체할 수 있습니까? 예를 들어 나는

  VTS_01_1.VOB  VTS_01_2.VOB  VTS_01_3.VOB

mencoder에서 사용하기 위해 이름을 바꾸고 싶습니다.

movie_1.avi movie_2.avi,etc..

VTS 교체 방법은 알지만 VOB 교체 방법은 모르겠습니다.

for i in  VTS_01_[1-4]*B;do echo ${i/VTS_0?_?.VOB/Movie}.avi;done

나에게 줘

Movie.avi
Movie.avi
Movie.avi
Movie.avi

제 생각에는

Movie_1.avi
Movie_2.avi
Movie_3.avi
Movie_4.avi

답변1

두 단계로 수행할 수 있습니다. 예를 들어 먼저 확장자를 제거한 다음 VTS_01접두사를 바꿉니다.

$ for i in VTS_01_[1-4]*B; do b="${i%.VOB}"; echo "${b/VTS_01/Movie}.avi"; done
Movie_1.avi
Movie_2.avi
Movie_3.avi

답변2

사용이름을 바꿔라프로그램. Perl 표현식을 사용합니다. 그러나 여기에는 복잡한 표현이 없습니다.

이 경우 다음을 사용할 수 있습니다.

rename VTS_01 movie VTS_01*VOB

답변3

파이썬을 사용하지 않는 이유는 무엇입니까? 그것은 마치

$ ipython
In [1]: import os
In [2]: all_files = os.listdir(".")
In [3]: for filename in all_files:
In [4]:     newname = 'Movie' + filename[6:9] + 'avi'
In [5]:     os.rename(filename, newname)

문제가 해결될 것입니다.

답변4

빙고!

for i in  VTS_01_[1-4]*B;do echo mv $i  "$(echo $i|sed 's/VTS/Movie/g;s/VOB/avi/g')";done

mencoder와 같은 명령에 더 유용합니다.

관련 정보