숫자를 제외한 모든 것을 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

숫자를 제외한 모든 것을 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

다음과 같이 파일 이름을 바꾸고 싶습니다.

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.

관련 정보