제거하다'? '단일 디렉토리에 있는 여러 파일 이름의 문자

제거하다'? '단일 디렉토리에 있는 여러 파일 이름의 문자

내 디렉토리에는 이름에 문자가 포함된 파일이 많이 있으며 ?이러한 문자를 제거하고 싶습니다 ?.

도와주세요?

답변1

rename 's/\?//g' *

모든 파일의 이름을 바꿀 사람

francois@zaphod:~/tmp$ ls
toto_?_  toto_?_1  toto_?_2

francois@zaphod:~/tmp$ rename 's/\?//g' *
francois@zaphod:~/tmp$ ls
toto__  toto__1  toto__2
francois@zaphod:~/tmp$

답변2

또는 유사한 쉘이 bash변수 값의 패턴과 일치하는 문자열의 모든 항목을 (예: 또는 )로 바꾸는 방법을 알고 있다고 가정합니다.${variable//pattern/replacement}zshksh

for name in ./*'?'*; do
    mv -i "$name" "${name//'?'/}"
done

이는 현재 디렉터리에서 하나 이상의 이름을 포함하는 모든 이름을 반복하는 짧은 루프입니다 ?(숨겨진 이름 건너뛰기). 이러한 각 이름에 대해 ?파일 이름에서 문자가 제거되고 결과가 파일의 새 파일 이름으로 사용됩니다.

패턴의 작은따옴표는 ?단일 문자와 일치하는 특수 와일드카드 문자로 처리되는 것을 방지합니다(따옴표가 없는 경우가 그렇습니다 ?). \?또는 을 사용할 수도 있습니다 [?].

출력에 물음표가 표시되면 ls인쇄할 수 없는 문자를 나타내는 것일 수 있습니다.

제거하다이것들'?', 위 코드의 각 항목을 로 바꿉니다 [![:print:]]. 와일드카드 패턴은 [![:print:]]인쇄할 수 없는 문자와 일치합니다. 문자 [:print:]클래스는 와 유사 [:graph:]하지만 전자는 공백 문자와 일치하고 후자는 일치하지 않습니다. 사용자 [![:print:]]회의아니요공백을 제거 하는 동안 공백을 제거합니다 [![:graph:]].

관련 정보