find
와일드 카드로 제한되지만 경로 이름에 공백이있는 폴더 세트에서 파일을 찾는 데 사용하고 싶습니다 .
커맨드 라인에서 이것은 쉽습니다. 다음 예제는 모두 작동합니다.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
예를 들어 terminal/my files/more
및 에서 파일을 찾습니다 tepid/my files/more
.
그러나 나는 이것이 스크립트의 일부가되어야한다. 내가 필요한 것은 다음과 같습니다.
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
불행히도 내가 무엇을하든 find
스크립트 내의 명령에서 와일드 카드와 공백을 혼합 할 수없는 것 같습니다 . 위의 예는 다음과 같은 오류를 반환합니다 (예상치 않은 백 슬래시 배가).
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
따옴표를 사용하려고하면 실패합니다.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
따옴표의 의미를 무시하고 다음 오류를 반환합니다.
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
여기 또 다른 예가 있습니다.
SEARCH='te*/my files/more'
find ${SEARCH} -print
예상대로 :
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
내가 시도한 모든 변형은 오류를 반환합니다.
해결 방법이 있는데 너무 많은 폴더를 반환하기 때문에 잠재적으로 위험합니다. 모든 공백을 다음과 같이 물음표 (한 문자 와일드 카드)로 변환합니다.
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
이것은 다음과 같습니다.
find te*/my?files/more -print
이것은 올바른 폴더뿐만 아니라을 반환 terse/myxfiles/more
합니다.
내가하려는 일을 어떻게 달성 할 수 있습니까? 구글은 나를 도와주지 않았다 :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
은 명령find -print
이 실행되는 결과를 낳습니다 .