ack로 모든 파일 검색 플래그 만 사용하므로

v2 를 사용하여 현재 디렉토리의 모든 파일 (바이너리 포함)을 어떻게 검색 할 수 ack있습니까?

나는 일을하는 것과 똑같이하고 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


답변

기본적으로 Ack는 현재 디렉토리 아래의 모든 비 이진 파일에서 패턴을 검색합니다.

구형 Ack 버전은 --binary플래그 를 전달할 때 이진 파일을 검색한다고 생각합니다 . 이 플래그는 제거되었습니다. 대신 grep을 사용할 수 있습니다.

grep -ar 'foo' .

답변

파일 이름을 ack에 전달하지 않으면 인식 할 수없는 이진 파일을 제외하는 내장 된 기본 파일 세트에서 작동합니다. 파일 이름을 전달하면 전달한 모든 파일을 검색합니다. 이 차이에 대해 설명 ack foo하고를 ack foo **.

ack 1

ack 1.x에서 플래그 -a를 사용하여 인식하지 못하는 파일을 건너 뛰지 않도록 ack에 지시합니다.

해당 플래그를 더 자주 원하지 않는 경우 별칭을 만들 수 있습니다 . 또는에 줄 alias ack='ack -a'을 추가하십시오 . 이 별칭을 설정 하고 옵션없이 전화를 걸려면 백 슬래시가 별칭 확장을 비활성화합니다. 스크립트는 별명에 영향을받지 않으며 대화식 쉘에만 영향을줍니다.~/.bashrc~/.zshrcack\ack

또는에 -a옵션을 추가 할 수 있습니다 ~/.ackrc.

이진 파일의 일치 항목은 “이진 파일 test1 일치”로 표시됩니다. Ack 자체를 수정하지 않고 (적어도 플러그인 추가)이 동작을 비활성화 할 수있는 방법은 없습니다.

ack 2

ack 2.0에서는 -a옵션이 제거되었습니다. 대신 모든 파일과 일치하는 유형을 정의하고 -k해당 유형의 모든 파일을 포함하도록 옵션을 사용하십시오 . 파일 형식은 예측할 수없는 순서로 처리되므로 임의의 이진 형식 집합이 일반 형식 대신 일반 형식으로 처리됩니다.

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

이렇게하면 다른 방법으로 바이너리로 보이는 파일에 대해서도 일치 항목이 인쇄됩니다. 위와 같이이 옵션을 별칭 또는에 추가 할 수 있습니다 .ackrc.