여러 파일 이름에서 특정 문자 뒤의 문자열을 제거하는 방법은 무엇입니까?

여러 파일 이름에서 특정 문자 뒤의 문자열을 제거하는 방법은 무엇입니까?

내 폴더에 이 이름 형식의 파일이 여러 개 있습니다.

01. file one-sdvanv-12lknl.srt
01. file one-sdvanv-12lknl.mp4
02. file two-afdsmakl-asdfafdaf.srt
02. file two-afdsmakl-asdfafdaf.mp4
03. file three-adfadaasd-asdfadfafad-adad1d1das.srt
03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4

-이제 파일 이름이 다음과 같이 보이도록 다음 문자열을 제거하려면 어떻게 해야 합니까?

01. file one.srt
01. file one.mp4
02. file two.srt
02. file two.mp4
03. file three.srt
03. file three.mp4

답변1

for file in *; do
    ext=.${file##*.}                #Gets file extension
    [ "$ext" = ".$file" ] && ext="" #If file had no extension, set it to empty string
    nostr=${file%%-*}               #Remove everything after -
    mv "$file" "$nostr$ext"
done

답변2

다음과 같이 bash 매개변수 대체를 사용할 수 있습니다.

for i in *; do
  # ${i%%-*} get everything before the first '-' (use ${i%-*} for the last '-')
  # ${i/.*} remove everything after the '.'
  # ${i##${i%.*}} remove everything except everything after the last '.'
  mv "${i}" "${i%%-*}${i##${i%.*}}"
done

답변3

다음에서 루프를 사용하십시오 bash.

for name in *.mp4 *.srt; do
    mv -i -- "$name" "${name/-*./.}"
done

이는 변수 대체를 통해 작동하며 .mp4이름의 첫 번째 대시와 마지막 점 사이의 부분을 점으로 바꿔 각 파일과 파일의 이름을 바꿉니다..srt

귀하의 질문에 표시되는 파일이기 때문에 특별히 .mp4및 파일을 선택하기로 결정했습니다 ..srt

휴대용 sh루프를 사용하십시오.

for name in *.mp4 *.srt; do
    mv -i -- "$name" "${name%%-*}.${name##*.}"
done

여기서는 ${name%%-*}첫 번째 대시 뒤의 모든 내용이 잘린 원래 이름이 되며 ${name##*.}파일 이름의 마지막 점 뒤의 파일 이름 접미사가 됩니다.


Perl 유틸리티 사용 rename:

$ tree
.
|-- 01. file one-sdvanv-12lknl.mp4
|-- 01. file one-sdvanv-12lknl.srt
|-- 02. file two-afdsmakl-asdfafdaf.mp4
|-- 02. file two-afdsmakl-asdfafdaf.srt
|-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4
`-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.srt

0 directory, 6 files
$ rename 's/-.*\././' -- *.mp4 *.srt
$ tree
.
|-- 01. file one.mp4
|-- 01. file one.srt
|-- 02. file two.mp4
|-- 02. file two.srt
|-- 03. file three.mp4
`-- 03. file three.srt

0 directory, 6 files

Perl 표현식은 s/-.*\././주어진 각 파일 이름에 적용되어 파일 이름을 바꾸는 대체입니다.

이렇게 바꾸면 파일 이름의 첫 번째 대시부터 마지막 ​​점까지의 부분이 점으로 대체됩니다.

-n유틸리티 호출에 추가하여 rename먼저 무슨 일이 일어나는지 확인할 수 있습니다.

또한보십시오:

관련 정보