파일 이름의 공백을 올바르게 처리하는 선택 스크립트 버전이 있습니까?
이것은 까다로운 문제입니다. 파일 이름의 공백을 처리하도록 pick을 쉽게 향상시킬 수 있지만 출력은 단지 파일 이름일 뿐이므로 패딩된 이름이 시작하거나 끝나는 위치가 표시되지 않습니다.
내 목표는 다음과 같은 말을 할 수 있는 것입니다.
for i in `pick .??*` ; do ... ; done
그러나 내가 아는 한 그것은 절망적이다. $()
백틱 대신 구문을 사용하더라도 선택부터 처리까지 파일 이름을 그대로 유지하려면 어떻게 해야 합니까?
내가 생각할 수 있는 유일한 도구는 xargs -0
임의의 이름을 가질 수 있게 해주는 도구입니다. 하지만 from 을 제외하고는 이 도구와 상호 작용하는 방법을 모르겠습니다 find -0
.
편집: Pick은 여러 파일을 가져와서 어떤 파일을 원하는지, 원하지 않는지 묻는 스크립트입니다.
바라보다 http://examples.oreilly.de/english_examples/upt3/split/pick 견본. 복잡하지는 않지만 쉘 스크립트 내에서 리디렉션하는 방법을 모르거나 이전에 이 구성을 본 적이 없다면 놀랄 수 있습니다.
예, 한 줄에 하나의 파일 이름을 출력합니다.
답변1
파일 이름이 한 줄씩 출력되는 경우 줄 바꿈만 포함하도록 pick
설정할 수 있습니다 . IFS
예를 들어 (Bash에서):
saved_ifs=$IFS
IFS=$'\n'
for i in $(pick .??*) ; do ... ; done
IFS=$saved_ifs
이렇게 하면 파일 이름에 공백과 탭이 포함될 수 있지만 물론 개행 문자가 포함되어 있으면 여전히 문제가 발생합니다. glob 문자(예: *
또는 ) 가 포함된 파일 이름이 있는 경우 ?
globbing을 비활성화하는 것이 좋습니다 . set -f
비활성화하고 set +f
다시 활성화하는 데 사용됩니다 .
답변2
find -name "* *" -type f -exec rename 's/ /_/g' {} +
파일 이름의 공백을 "_"로 바꿉니다.
그런 다음 선택을 사용하십시오.
이유:파일 이름의 공백은 비표준 파일 명명 규칙으로 간주되는 경우가 많습니다. 성공적인 IT는 Sun Tzu의 병법을 연상시키는 매번 동일한 방식으로 작업을 수행하는 것입니다.전투를 신중하게 선택하세요.