Linux에서 파일 이름의 특수 문자를 일괄 제거


5

나는 여러 파일의 다운로드 된 .pdfs에서 모든 특수 문자를 제거하려고 노력 중이며 OS X 환경에서 찾던 정확한 해결책을 찾았습니다.

MacOS X에서 저장하는 동안 파일 이름에서 특수 문자를 자동으로 제거하는 기능 .

비슷한 방법으로 - sed 또는 일부 다른 기능 - Linux 환경에서 구현할 수 있습니까?

답변:


11

이 작업은 rename 명령. 특수 문자가있는 .pdf 파일이있는 폴더에있는 경우 :

rename 's/[^a-zA-Z0-9]//g' *.pdf

이렇게하면에 끝나는 파일의 모든 문자가 제거됩니다. .pdf 두 경우 모두 A-Z가 아니거나 숫자 여야합니다. 이 목록에 추가 할 수 있습니다 :

rename 's/[^a-zA-Z0-9_]//g' *.pdf

이 버전은 밑줄을 허용합니다.


1
후속 질문 : 파일 이름에 영어 알파벳이 아닌 문자가 포함되어있을 때이를 수행하는 방법을 알고 있습니까? 내가 명령을 할 때 "이름을 바꿀 수 없다. filename: 각 파일에 대해 유효하지 않거나 불완전한 멀티 바이트 또는 와이드 문자 ".
user2044638

@ user2044638이 파일의 이름을 mv?
Paul

예. 문제없이 모든 파일을 작업했습니다.
user2044638

흠, 나를 위해 일하는 것 같지 않습니다. 필자는 필요한 util-linux 패키지를 설치했으며, 실행되는 것처럼 보이지만 파일 이름에는 변화가 없습니다. 어딘가에서 "이름 바꾸기"에 대한 문서가 있습니까?
nitrl

1
@nitrl 두 개의 "rename"유틸리티가 있는데, 하나는 정규식을 지원하고 다른 하나는 정규식을 지원하지 않습니다. 가지고있는 설명서 페이지를 확인하십시오.
Paul

4

전체 파일 이름과 여러 파일을 처리하려면 :

  • 더하다 /g 전체 파일 이름을 처리합니다.
  • 더하다 _ 밑줄 문자로 바꾸려면 (필요한 경우)
  • 마지막에 공백으로 구분 된 파일 또는 개별 파일 이름의 추가 '유형'을 모두 추가하십시오.

이름 바꾸기 / [^ a-zA-Z0-9 _] / _ / g '* mp4 * avi


-2

*에있는 파일의 경우; mv "$ file"$ (echo "$ file"| sed -e 's / [^ A-Za-z0-9. -] / /지'); 완료 (& amp;


2
이 질문에 대답 할 수 있지만, 당신이 몇 가지 설명을 제공 할 수 있다면 더 나은 대답이 될 것입니다. 그것은 그렇게한다.
DavidPostill

사실 허용 된 것과 동일합니다. rename 실수로 진입하는 것이 더 힘들다.
xenoid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.