어떻게 검색할 수 있어?모두현재 디렉토리에 v2가 포함된 ack
파일(바이너리 포함) ?
나는 do와 동일한 작업을 수행하고 싶지만 ack 'foo' **
플래그를 사용하여 **
.
ack 'foo'
ack 'foo' **
차이점 은 다음과 같습니다.
$ mkdir test && cd test
$ printf '\x00\x01foo1\x00' > test1
$ printf 'foo2' > test2
$ ack 'foo'
test2
1:foo2
$ ack 'foo' **
test1
1:foo1
test2
1:foo2
답변1
파일 이름을 확인하지 않으면 인식할 수 없는 바이너리를 제외하는 내장 기본 파일 세트에서 작동합니다. 파일 이름을 전달하면 전달한 모든 파일을 검색합니다. 이것은 ack foo
와 의 차이점을 설명합니다 ack foo **
.
확인 1
ack 1.x에서는 이 플래그를 사용하여 -a
ack가 인식하지 못하는 유형의 파일을 건너뛰지 않도록 지시합니다.
이 플래그가 자주 필요한 경우 별칭을 만들 수 있습니다. 또는 alias ack='ack -a'
에 ~/.bashrc
이 줄을 추가하세요 ~/.zshrc
. 이 별칭을 설정하고 ack
이 옵션 없이 호출 하려면 다음을 호출하세요 \ack
(백슬래시는 별칭 확장을 비활성화합니다). 스크립트는 별칭의 영향을 받지 않으며 대화형 셸만 영향을 받습니다.
또는 -a
이 옵션을 ~/.ackrc
.
바이너리의 일치 항목은 "Binary test1 match"로 나열됩니다. Ack 자체를 수정하지 않고(적어도 플러그인을 추가하지 않고) 이 동작을 비활성화할 수 있는 방법은 없습니다.
확인 2
ack 2.0에서는 이 -a
옵션이 제거되었습니다. 당신이 할 수 있는 일은 모든 파일과 일치하는 유형을 정의하고 옵션을 사용하여 -k
ack에 해당 유형의 모든 파일을 포함시키는 것입니다. 파일 유형은 예측할 수 없는 순서로 처리되므로 임의의 바이너리 유형 집합이 일반적인 유형이 아닌 일반 유형으로 처리됩니다.
ack --type-set='all:match:.*' -k foo
이렇게 하면 원래 바이너리로 보이는 파일에 대해서도 일치하는 항목이 인쇄됩니다. 위에서 언급한 대로 이러한 옵션을 별칭 또는 .ackrc
.
답변2
기본적으로 Ack는 현재 디렉터리에 있는 모든 비바이너리 파일에서 패턴을 검색합니다.
나는 이전 Ack 버전에 플래그를 전달하면 바이너리를 검색한다고 믿습니다 --binary
. 그러나 로고는 제거되었습니다. 대신 grep을 사용할 수도 있습니다.
grep -ar 'foo' .