디렉토리 검색
매뉴얼 페이지에 표시된 개요를 기반으로 디렉토리를 처리 할 수 있지만 스위치를 보면 패턴을 기반으로 파일 만 찾을 수는 없습니다. 이를 위해서는에 참여해야합니다 find
. 이 명령 ack
에는에서 --files-from=FILE
파일 목록을 제공 할 수 있도록 옵션이 포함되어 있습니다 find
.
개요
ack [options] PATTERN [FILE...]
ack -f [options] [DIRECTORY...]
용법
--files-from=FILE
The list of files to be searched is specified in FILE. The list of
files are separated by newlines. If FILE is "-", the list is
loaded from standard input.
--ignore-file=
원하는 것을 줄 수 있지만 실제로 사용하기에는 약간의 고통 이있는 옵션이 있습니다.
--ignore-file=FILTERTYPE:FILTERARGS
Ignore files matching FILTERTYPE:FILTERARGS. The filters are
specified identically to file type filters as seen in "Defining
your own types".
특정 유형의 파일 검색
내가 이것을 통해 생각할 수있는 유일한 다른 방법 ack
은 --type
스위치 를 사용하는 것입니다 .
--type=[no]TYPE
Specify the types of files to include or exclude from a search.
TYPE is a filetype, like perl or xml. --type=perl can also be
specified as --perl, and --type=noperl can be done as --noperl.
If a file is of both type "foo" and "bar", specifying --foo and
--nobar will exclude the file, because an exclusion takes
precedence over an inclusion.
사용 가능한 유형을 확인하려면
$ ack --help-types | grep -E "perl|cpp"
체재. 예를 들어 --type = perl 및 --perl이 모두 작동합니다. -[no] cpp .cpp .cc .cxx .m .hpp .hh .h .hxx-[no] objcpp .mm .h-[no] perl .pl .pm .pod .t .psgi; 첫 줄은 /^#!.*\bperl/-[no] perltest와 일치합니다.
예
파일 이름 (* .pm, * .pl, * .t 및 * .pod)과 shebang 행을 기반으로 모든 Perl 파일을 찾으십시오.
$ ack -f --type perl
examples/iwatch/iwatch/iwatch
examples/nytprof_perl/bad.pl
모든 C ++ 파일을 찾으십시오.
$ ack -f --type=cpp
Shared/Scanner.h
Shared/Sorter.h
Shared/DicomHelper.cpp
Shared/DicomDeviationWriter.h
bar * .c에서 foo 검색
그렇다면 원하는 것을 어떻게 달성 할 수 있습니까? 글쎄, 당신은 아마 find
이것을 사용해야 할 것입니다 :
$ find adir -iname "bar*.c" | ack --files-from=- foo
adir/bar1.c
1:foo
2:foo
adir/dir1/bar1.c
1:foo
2:foo
당신은 또한 사용할 수 있습니다 ack
(사용하여 파일 이름에 지정된 패턴과 일치하는 파일을 검색 할 수의 능력 -g <pattern>
), 다음의 두 번째 호출이 목록을 통과 ack
하여 -x
또는 --files-from=-
..
사용 -x
:
$ ack -g '\bbar.*.c$' | ack -x foo
bar1.c
1:foo
2:foo
dir1/bar1.c
1:foo
2:foo
사용 -files-from=-
:
$ ack -g '\bbar.*.c$' | ack --files-from=- foo
bar1.c
1:foo
2:foo
dir1/bar1.c
1:foo
2:foo
두 경우 모두이 정규식을 사용하려는 파일 이름과 일치합니다.
\bbar.*.c$
이것은 줄 끝 앵커를 사용하여 이름이 bar.*c
끝나고 끝나는 파일과 일치합니다 . 또한 이름을 사용하여 경계 문자가 있는지 확인합니다 . 또는 예를 들어 경계 문자가 포함 된 파일의 경우 실패합니다 ..c
$
\b
$bar.c
%bar.c
find . -name "bar*.c" -exec ack foo {} \;
. 특별한 것은 없습니다 . find 's와 함께 모든 명령을grep
사용할 수 있습니다 .-exec