파일 이름 조작을 위해 bash 쉘 매개변수 확장을 사용하는 방법

파일 이름 조작을 위해 bash 쉘 매개변수 확장을 사용하는 방법

동일한 디렉토리에 있는 MP3 목록의 이름을 바꾸고 싶습니다. 예를 들면 다음과 같습니다.

001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3

다음 명령 예제를 시도했습니다.

for i in *.mp3 ; do echo "${/[0-9]-/i}" ; done 

나는 가지고있다

bash: ${/[0-9]-/i}: bad substitution

나는 이 결과를 원한다:

toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3

감사해요

답변1

i루프의 각 파일 이름에 대해 변수를 설정 했지만매개변수 확장${; 바로 뒤에 변수 이름이 표시되기를 기대하는 대신 마지막에 닫는 중괄호 바로 앞에 변수 이름을 입력합니다.

파일 이름 앞의 텍스트만 제거하려면 다음 구문을 사용하십시오.

for i in *.mp3 ; do echo "${i#[0-9][0-9][0-9] - }" ; done 

이렇게 하면 3개가 제거됩니다.선두숫자 뒤에는 공백 대시 공백이 옵니다.

답변2

test.txt 파일의 모든 파일 이름을 언급하십시오.

$ cat test.txt
001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3

다음 명령은 문제가 있는 파일을 검색하고 올바른 이름으로 이름을 바꿉니다.

cat test.txt | sed -n '/^0\{2\}/p' | awk '{print "mv" " " $0 " " $3}' |
sed "s/ /&'/1" | sed "s/.mp3/&'/1" | sh
toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3

관련 정보