ack를 사용하여 모든 파일 검색

ack를 사용하여 모든 파일 검색

어떻게 검색할 수 있어?모두현재 디렉토리에 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에서는 이 플래그를 사용하여 -aack가 인식하지 못하는 유형의 파일을 건너뛰지 않도록 지시합니다.

이 플래그가 자주 필요한 경우 별칭을 만들 수 있습니다. 또는 alias ack='ack -a'~/.bashrc이 줄을 추가하세요 ~/.zshrc. 이 별칭을 설정하고 ack이 옵션 없이 호출 하려면 다음을 호출하세요 \ack(백슬래시는 별칭 확장을 비활성화합니다). 스크립트는 별칭의 영향을 받지 않으며 대화형 셸만 영향을 받습니다.

또는 -a이 옵션을 ~/.ackrc.

바이너리의 일치 항목은 "Binary test1 match"로 나열됩니다. Ack 자체를 수정하지 않고(적어도 플러그인을 추가하지 않고) 이 동작을 비활성화할 수 있는 방법은 없습니다.

확인 2

ack 2.0에서는 이 -a옵션이 제거되었습니다. 당신이 할 수 있는 일은 모든 파일과 일치하는 유형을 정의하고 옵션을 사용하여 -kack에 해당 유형의 모든 파일을 포함시키는 것입니다. 파일 유형은 예측할 수 없는 순서로 처리되므로 임의의 바이너리 유형 집합이 일반적인 유형이 아닌 일반 유형으로 처리됩니다.

ack --type-set='all:match:.*' -k foo

이렇게 하면 원래 바이너리로 보이는 파일에 대해서도 일치하는 항목이 인쇄됩니다. 위에서 언급한 대로 이러한 옵션을 별칭 또는 .ackrc.

답변2

기본적으로 Ack는 현재 디렉터리에 있는 모든 비바이너리 파일에서 패턴을 검색합니다.

나는 이전 Ack 버전에 플래그를 전달하면 바이너리를 검색한다고 믿습니다 --binary. 그러나 로고는 제거되었습니다. 대신 grep을 사용할 수도 있습니다.

grep -ar 'foo' .

관련 정보