파일 이름을 바꾸고 이중 공백을 단일 공백으로 바꾸는 스크립트가 필요합니다.

파일 이름을 바꾸고 이중 공백을 단일 공백으로 바꾸는 스크립트가 필요합니다.

누군가 디렉토리 이름에서 이중 공백을 제거하는 방법을 알아내도록 도와줄 수 있습니까?

이름에 공백이 포함된 파일에 대한 디렉터리 구조를 제공하는 서비스를 사용하고 있습니다. 때로는 디렉토리 이름에 이중 공백이 포함되어 있고 일부 홈브루 스크립트가 이를 처리할 수 없는 경우가 있습니다.

디렉토리 이름을 바꾸고 이중 공백을 제거하는 쉘 명령 조합을 원합니다. .sed 's/ / /g'

다행히 하위 디렉터리가 없는 상위 디렉터리도 이름을 바꿔야 합니다.

이런 후보자를 찾을 수 있어요

sh> find ~/Downloads/Scala_Intro -name '*  *' -print 
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward  Cacioppo_2973_assignsubmission_file_
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Implement histogram-3169/Edward  Cacioppo_3102_assignsubmission_file_

xargs그러나 를 사용하여 이 일련의 줄을 조작 하려고 하면 xargs바꾸기가 이중 공백을 제거하는 것처럼 보입니다. 따라서 명령줄을 생성할 수 없습니다.mv old-name new-name

sh> find ~/Downloads/Scala_Intro -name '*  *' -print | xargs -I % echo %
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Implement histogram-3169/Edward Cacioppo_3102_assignsubmission_file_

다음과 같은 것을 시도하고 있지만 작동하지 않습니다.

sh> find ~/Downloads/Scala_Intro -name '*  *' -print | xargs -p -I % mv  "%" `echo "%" | sed 's/  / /g'`
mv /Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_ /Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_?...

xargs가 명령 실행 여부를 묻는 경우 이중 mv공백이 단일 공백으로 변환되었습니다.

답변1

xargs및 대신 도구를 mv선호합니다 rename.

사용 중인 이름 바꾸기 도구에 따라 다릅니다.

find ~/Downloads/Scala_Intro -name '*  *' -exec rename -n '  ' ' ' {} +

또는

find ~/Downloads/Scala_Intro -name '*  *' -exec rename -n 's/  / /' {} +

( -n출력이 만족스러우면 옵션(모의 실행)을 제거하여 실제로 이름 바꾸기를 수행합니다.)


또는 계속 사용하고 싶다면 mv(필요 없음 xargs, find -exec좋습니다):

find ~/Downloads/Scala_Intro -name '*  *' -exec sh -c 'mv "$1" "${1//  / }"' find-sh {} \;

관련 정보