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

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

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

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

또한보십시오:

관련 정보