누군가 디렉토리 이름에서 이중 공백을 제거하는 방법을 알아내도록 도와줄 수 있습니까?
이름에 공백이 포함된 파일에 대한 디렉터리 구조를 제공하는 서비스를 사용하고 있습니다. 때로는 디렉토리 이름에 이중 공백이 포함되어 있고 일부 홈브루 스크립트가 이를 처리할 수 없는 경우가 있습니다.
디렉토리 이름을 바꾸고 이중 공백을 제거하는 쉘 명령 조합을 원합니다. .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 {} \;