ডিরেক্টরি অনুসন্ধান করা হচ্ছে
ম্যান পৃষ্ঠায় প্রদর্শিত সংক্ষিপ্তসারের উপর ভিত্তি করে আমি বলব হ্যাঁ এটি কোনও ডিরেক্টরিতে প্রক্রিয়া করতে পারে তবে স্যুইচগুলির দিকে তাকালে এটি কোনও প্যাটার্নের ভিত্তিতে কেবল কোনও ফাইল সন্ধান করতে পারে না। তার জন্য আপনাকে তালিকাভুক্ত করতে হবে 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 = পার্ল এবং - স্পার উভয়ই কাজ করে। । প্রথম লাইনের সাথে মেলে
উদাহরণ
ফাইলের নাম (*। Pm, * .pl, * .t এবং * .pod) এবং শেবাং লাইন উভয়ের উপর ভিত্তি করে সমস্ত পার্ল ফাইল সন্ধান করুন।
$ ack -f --type perl
examples/iwatch/iwatch/iwatch
examples/nytprof_perl/bad.pl
সমস্ত সি ++ ফাইল সন্ধান করুন:
$ ack -f --type=cpp
Shared/Scanner.h
Shared/Sorter.h
Shared/DicomHelper.cpp
Shared/DicomDeviationWriter.h
বার * .c এ ফুও অনুসন্ধান করা হচ্ছে
তাহলে আপনি কী চান তা কীভাবে সম্পাদন করতে পারেন? ভাল আপনি সম্ভবত এটি করতে ব্যবহার 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 {} \;
কী দোষ হয়েছে ? এখানে বিশেষ কিছু নেইgrep
, আপনি সন্ধানের সাথে কোনও আদেশ ব্যবহার করতে পারেন-exec
।