파일 이름에서 특정 문자 제거

파일 이름에서 특정 문자 제거

나는 이것에 대해 조금 이해합니다. 아래 명령은 모든 파일 이름에서 공백을 제거합니다.

find . -type f -name "* *.*" -exec bash -c 'mv "$0" "${0// /}"' {} \;

 쉼표, 마침표 및 괄호( ,  ,,  .,  ( 및  ) 도 제거하고 싶지만  ) 명령에서 제거하려는 문자를 배치할 위치를 모르겠습니다.

답변1

짧은 대답은 다음과 같습니다. 파일 이름(에서  $0)에서 공백, 쉼표, 마침표 및 괄호를 제거하는 명령은 다음과 같습니다 .

mv "$0" "${0//[ ,.()]/}"

하지만 그것을 사용하지 마십시오 ...

더 긴 답변:

  • 귀하의 find명령은 다음과 같습니다 -name "* *.*". 이름에 공백이 하나 이상 포함된 파일을 선택합니다. 그 뒤에는 적어도 하나의 마침표가 옵니다.  이름에 공백이 포함되지 않은 파일을 처리하지 않는 것이 합리적입니다. 공백이 없으면 제거할 것이 없기 때문입니다. 하지만 해당 명령이 기간 동안 테스트되는 이유를 모르겠습니다. 이름이 fat cat.txt로 변경되지만 그대로 유지 fatcat.txt됩니다 .hot dogfrank.fur ter

    이름에 마침표가 있는 파일의 이름을 바꾸려면(마침표를 제거하기 위해) 테스트 -name를  -name "*[ ,.()]*".

  • 미리 알려지지 않은 파일 이름을 처리할 때는  --첫 번째 파일 이름 앞에 두는 것이 가장 좋습니다. 일을 할 때 이것이 꼭 필요한 것은 아니라고 주장할 수 있지만 find . … -exec …, 들이는 것은 좋은 습관입니다.

  • fat cat.txt및 이라는 파일이 있는 경우 f a t c a t.txt둘 다 로 이름이 바뀌고 fatcat.txt두 번째 파일이 첫 번째 파일을 방해합니다. -n(no-clobber) 옵션을 전달하면 mv 이러한 일이 발생하지 않습니다. 하지만 주의하세요. 이름에 공백 등이 포함된 파일이 남게 되며 문제가 있다는 사실조차 알려주지 않을 수도 있습니다!

  • 현재 명령은 bash모든 파일에 대해 새 프로세스를 호출합니다. 이로 인해 필요 이상으로 시간이 오래 걸릴 수 있습니다. bash한 번 호출한 다음 mv여러 번 호출하는 것이 좋습니다 . 그래서 위의 내용을 모두 종합하면,

    find . -type f -name "*[ ,.()]*" -exec bash -c 'mv -n -- "$1" "${1//[ ,.()/}"' sh {} +
    

    하지만 기다려! 우리는 아직 끝나지 않았습니다! 위의 내용을 사용하지 마십시오.

  • find를 사용하여 명령을 실행할  때 -exec파일의 경로 이름을 명령에 전달합니다. fat cat.txt현재 디렉터리에 파일이 호출되면 bash 명령으로 find전달됩니다 . ./fat cat.txt위 명령은 fat cat.txt( ./fat cat.txt)의 이름을 로  바꾸려고 시도합니다 /fatcattxt. 루트(예: )로 실행 중인 경우  sudo파일이 루트 디렉터리로 이동되어 큰 혼란이 발생합니다. (교훈: sudo꼭 필요하다고 확신하지 않는 한 에서 명령을 실행하지 마십시오 .) 루트로 실행하지 않는 경우 '좋은 소식'은 명령이 아무 작업도 수행하지 않는다는 것입니다.

    이제 모든 것을 종합하면 다음과 같습니다.

    find . -type f -name "*[ ,.()]*" -exec bash -c 'for f do dir="$(dirname "$f")"; base="$(basename "$f")"; echo mv -n -- "$f" "$dir/${base//[ ,.()]}"; done' sh {} +
    

    echo위의 명령에는 "도약하기 전에 살펴보기" 조치가 포함되어 있습니다 . 위의 명령을 실행하면 mv필요한 모든 명령이 표시됩니다 . 문제가 없어 보이면 “ echo”을 제거하고 명령을 다시 실행하십시오.


그건 그렇고, 질문에 표시하는 명령은 다음과 같은 파일이 있으면 실패합니다. .이름에 공백이 있는 디렉토리에 있습니다.

관련 정보