조회 중 와일드카드 확장 방지

조회 중 와일드카드 확장 방지

find다음이 작동하도록 명령에서 와일드카드 확장을 방지하는 방법이 있습니까 ?

find . -iname "foo [bar]"

지적한대로여기set -f, 나는 이전에 성공 하지 못한 채 달리기를 시도했습니다 set -o noglob.setopt noglobfind

bash다음은 Ubuntu 10.04를 사용하는 스크립트 입니다 .

와일드카드를 피할 수 있다는 것을 알고 있지만 와일드카드를 놓칠까 봐 걱정됩니다.

답변1

find@njsg가 이미 말했듯이 문제는 쉘이 아니라 쉘 에 의해 발생합니다 . 사용하는 큰따옴표는 이미 표현식을 find수정되지 않은 상태로 전달하여 쉘에서 보호합니다.

문제는 find주장을 패턴으로 보는 -name데 있습니다 -iname. 이를 억제하는 유일한 방법은 find인수를 패턴으로 처리하지 않는 옵션을 사용하는 것입니다. 하지만 find내 매뉴얼 페이지에 따르면 그런 것이 없으므로 원하는 작업을 수행할 수 없습니다. 당신이 할 수 있는 가장 좋은 일은 괄호를 에 전달할 때 더 잘 작동하도록 스크립트를 향상시키는 것입니다 find. 아래의 흥미로운 sed대체가 이를 수행합니다.

echo "foo [bar]" | sed 's/[][]/\\&/g'

다음을 인쇄합니다:foo \[bar\]

답변2

문제는 쉘에 있는 것이 아니라 찾기에 있습니다. -name및 의 매개변수는 -iname다음과 같습니다.무늬그 자체. , 또는을 [bar]의미 합니다 . 대괄호를 이스케이프 처리해 보세요. 예:barfind

find . -iname 'foo \[bar\]'

(편집: 이 방법을 사용하면 쉘 수준에서 이스케이프 처리하지 않고 백슬래시를 find.)

관련 정보