find
다음이 작동하도록 명령에서 와일드카드 확장을 방지하는 방법이 있습니까 ?
find . -iname "foo [bar]"
지적한대로여기set -f
, 나는 이전에 성공 하지 못한 채 달리기를 시도했습니다 set -o noglob
.setopt noglob
find
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]
의미 합니다 . 대괄호를 이스케이프 처리해 보세요. 예:b
a
r
find
find . -iname 'foo \[bar\]'
(편집: 이 방법을 사용하면 쉘 수준에서 이스케이프 처리하지 않고 백슬래시를 find
.)