내 폴더에 이 이름 형식의 파일이 여러 개 있습니다.
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
먼저 무슨 일이 일어나는지 확인할 수 있습니다.
또한보십시오: