확장자를 무시하고 마지막 "-" 이후의 부분을 제거하기 위해 파일 이름을 일괄적으로 변경합니다.

확장자를 무시하고 마지막 "-" 이후의 부분을 제거하기 위해 파일 이름을 일괄적으로 변경합니다.

-다음과 같은 방법으로 특정 폴더의 파일 이름을 일괄적으로 바꾸고 마지막 부분 뒤의 부분을 제거하고 싶습니다 .

  • hello world - Mr Sheep에게hello world
  • super user - question on super user.docx에게super user.docx
  • abc - def - ghi jkl.pdf에게abc - def.pdf

저는 명령줄 솔루션을 선호하지만 다른 옵션도 괜찮습니다.

답변1

bash에서와 같이 마지막 -사용을 제거하려면 변수 끝에서 가장 짧은 패턴이 제거됩니다. 자세한 내용은 다음을 참조하세요.${f% - *}${var%Pattern}매개변수 대체. 결과는 이렇습니다

for f in path/*
do
    if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi
    echo mv "$f" "${f% - *}$ext"
done

새 파일 이름이 올바른지 확인한 후 제거 echo하여 실제 이름을 바꿀 수 있습니다. 데모:

$ for f in "hello world - Mr Sheep" "super user - question on super user.docx" "abc - def - ghi jkl.pdf"; do if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi; echo mv "'$f'" "'${f% - *}$ext'";  done
mv 'hello world - Mr Sheep' 'hello world'
mv 'super user - question on super user.docx' 'super user.docx'
mv 'abc - def - ghi jkl.pdf' 'abc - def.pdf'

관련 정보