ack로 모든 파일 검색


14

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

grep 대신에 ack을 사용하려는 이유는 무엇입니까?
Andy Lester

1
@AndyLester 나는 단지 그것이 ack항상 낫다고 생각했다 grep. 내가 틀렸어 :).
Tyilo

답변:


6

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

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

grep -ar 'foo' .

심볼릭 링크와 관련이 없습니다. 바이너리 파일과 관련이 있습니다!
Tyilo

@ 타일로 : 답변을 수정했습니다.

13

파일 이름을 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.


1
@Gilles.
Andy Lester

@AndyLester, 왜 -a 옵션이 제거 되었습니까? 반환 된 "이것은"때문에 실제로 인식되지 않는 파일 형식을 더 이상 검색 할 수없는 이유를 설명하지 않습니다.
Yann Dìnendal

인식 할 수없는 모든 텍스트 파일을 검색하는 1.x의 -a 동작이 2.0의 기본값입니다.
Andy Lester

2
이상하게도, 나는 특별한 매치
전형

나는 그 때문에 여기에 있습니다 : 축소 된 js 파일 내부의 텍스트 .ack로 구문 분석되지 않습니다. 나는 대답이 "add -a"와 같을 것이라고 생각했다 ... 나는 실망했다.
Luciano Fantuzzi 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.