폴더에 이 이름 형식의 파일이 여러 개 있습니다.
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
또한보십시오: