Mencari direktori
Berdasarkan sinopsis yang diperlihatkan dalam halaman manual saya akan mengatakan ya itu dapat memproses direktori, tetapi melihat sakelar itu tidak dapat mencari hanya file berdasarkan suatu pola. Untuk itu Anda harus mendaftar find
. Perintah ack
tidak menyertakan opsi --files-from=FILE
sehingga dapat diumpankan daftar file dari find
.
ringkasan
ack [options] PATTERN [FILE...]
ack -f [options] [DIRECTORY...]
pemakaian
--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.
Ada --ignore-file=
opsi yang dapat memberi Anda apa yang Anda inginkan tetapi tampaknya sedikit sakit untuk benar-benar digunakan.
--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".
Mencari jenis file tertentu
Satu-satunya cara lain yang bisa saya bayangkan untuk melakukan hal ini ack
adalah dengan menggunakan --type
sakelarnya:
--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.
Untuk melihat jenis apa yang tersedia:
$ ack --help-types | grep -E "perl|cpp"
format. Misalnya, keduanya --type = perl dan --perl berfungsi. - [tidak] cpp .cpp .cc .cxx .m .hpp .hh .h .hxx - [tidak] objcpp .mm .h - [tidak] perl .pl .pm .pod .t .psgi; baris pertama cocok /^#!.* \bperl/ - [no] perltest .t
Contohnya
Temukan semua file Perl, berdasarkan nama file (* .pm, * .pl, * .t dan * .pod) dan baris shebang.
$ ack -f --type perl
examples/iwatch/iwatch/iwatch
examples/nytprof_perl/bad.pl
Temukan semua file C ++:
$ ack -f --type=cpp
Shared/Scanner.h
Shared/Sorter.h
Shared/DicomHelper.cpp
Shared/DicomDeviationWriter.h
Mencari foo di bilah * .c
Jadi, bagaimana Anda bisa mencapai apa yang Anda inginkan? Mungkin Anda harus menggunakannya find
untuk melakukan ini:
$ find adir -iname "bar*.c" | ack --files-from=- foo
adir/bar1.c
1:foo
2:foo
adir/dir1/bar1.c
1:foo
2:foo
Anda juga dapat menggunakan ack
kemampuan untuk mencari file yang cocok dengan pola yang diberikan dalam nama file mereka (menggunakan -g <pattern>
), dan kemudian meneruskan daftar ini ke doa kedua ack
menggunakan -x
atau --files-from=-
..
Menggunakan -x
:
$ ack -g '\bbar.*.c$' | ack -x foo
bar1.c
1:foo
2:foo
dir1/bar1.c
1:foo
2:foo
Menggunakan -files-from=-
:
$ ack -g '\bbar.*.c$' | ack --files-from=- foo
bar1.c
1:foo
2:foo
dir1/bar1.c
1:foo
2:foo
Dalam kedua kasus kami mencocokkan nama file yang Anda inginkan menggunakan regex ini:
\bbar.*.c$
Ini cocok dengan file yang namanya bar.*c
dan berakhir setelah .c
menggunakan ujung jangkar $
,. Kami juga berupaya memastikan bahwa nama-nama tersebut menggunakan karakter batas \b
. Ini akan gagal untuk file yang berisi karakter batas seperti $bar.c
atau %bar.c
misalnya.
find . -name "bar*.c" -exec ack foo {} \;
? Tidak ada yang istimewagrep
, Anda dapat menggunakan perintah apa pun dengan find's-exec
.