다음과 같이 파일 이름을 바꾸고 싶습니다.
SL Benfica vs. SC Beira-Mar 136.mp4
SL Benfica vs. SC Beira-Mar 137.mp4
SL Benfica vs. SC Beira-Mar 138.mp4
SL Benfica vs. SC Beira-Mar Jogo 074.mp4
SL Benfica vs. SC Beira-Mar Jogo 082.mp4
SL Benfica vs. SC Beira-Mar Jogo 112.mp4
하지만 이것은
for f in *.mp4; do echo mv "$f" "${f//[^0-9]/}.mp4"; done
끝에 "4"를 추가합니다.
1364.mp4
1374.mp4
1384.mp4
0744.mp4
0824.mp4
1124.mp4
"mp4"의 "4"와 혼동된 것 같습니다. 이 문제를 어떻게 해결할 수 있나요?
답변1
.mp4
대체하기 전에 접미사를 제거하십시오.
for f in *.mp4; do
fname=${f%.mp4}
mv -- "$f" "${fname//[^0-9]}.mp4"
done
--
파일 이름이 a로 시작하는 경우를 대비하여 추가 -
하고 제거했습니다 echo
.
답변2
당신 말이 맞습니다. 4
나타나는 것은 mp4
확장 프로그램에서 나온 것입니다. 그 이유는 당신이 다루고 있기 때문입니다가득한${f//[^0-9]/}
해당 .mp
부분을 포함하여 파일 이름 문에서 숫자가 아닌 문자를 모두 제거하고 4
끝에 있는 문자를 유지합니다.
sed
다음과 같은 목적 으로 사용할 수 있습니다 .
for f in *.mp4; do
newname="$(sed 's/^[^0-9]*//' <<< "$f")"
mv "$f" "$newname"
done
하지만 테스트해 보세요(귀하의 게시물에서 읽은 것처럼 분명히 그랬던 것처럼).
답변3
당신을 사용하면 prename
다음과 같은 것을 실행할 수 있습니다
prename 's/^\D*//' *.mp4
노트:
\D
숫자가 아님^\D*
파일 이름 시작 부분에 숫자가 아닌 시퀀스s/^\D*//
처음에 숫자가 아닌 것을 제거하고 이름을 바꿉니다.
Ubuntu와 같은 일부 Linux 배포판에서는 이 명령을 이라고 하고 rename
, Arch와 같은 다른 배포판에서는 이 명령을 이라고 합니다 perl-rename
.