বিকল্পের সন্ধান? [বন্ধ]


30

findআরও প্রচলিত সিএলআই ইন্টারফেস সহ কোনও বিকল্প প্রোগ্রাম রয়েছে কি ? findবেশিরভাগ অন্যান্য ব্যবহারের চেয়ে বেদনাদায়কভাবে আলাদাভাবে প্যারামিটারগুলি কাজ করে এবং প্রত্যাশা করে।

স্পেসিফিকেশন: আমি এমন একটি প্রোগ্রাম খুঁজছি যা বেশিরভাগ একই কার্যকারিতা সহ একটি কমান্ডলাইন ইন্টারফেসের সাথে খুঁজে পায় যা পসিক্স (বা কমপক্ষে জিএনইউ) কমান্ডলাইন সুপারিশগুলির মতো কাজ করে এবং অনুভব করে।


7
জিএনইউ অনুসন্ধান কমান্ড লাইনের জন্য পসিক্স (বা এমনকি জিএনইউ) নির্দেশনাগুলি সম্মান করে না। উদাহরণস্বরূপ, প্যারামিটারগুলি অর্ডার করা, একক ড্যাশ সহ বহু-চরিত্রের বিকল্পগুলি প্রোগ্রামগুলির সাথে তুলনায় আলাদা।
ট্যামস সেজেলি

3
আমি জানি, এবং আমি সর্বদা যা করতে চাই তা করতে পারি একটি উপায় বা অন্য উপায়। আমি সম্প্রতি জানতে পেরেছি ackএবং ভাবছিলাম যে আরও ভাল কিছু আছে কিনা find
ট্যামস সেজেলি

2
না, আপনি দেখুন, আমি একটি ছোট প্রোগ্রামিং ভাষা চাই না, তবে একটি সহজ, আরও স্বজ্ঞাত এবং আরও সুসংগত অনুসন্ধান (এমনকি যদি এটি কিছু উন্নত কার্যকারিতা হ্রাস পায়)। যখন আমি কোনও কাজের মুখোমুখি হই যা একটি প্রোগ্রাম লেখার ন্যায্যতা দেয়, তখন আমি তা করি।
ট্যামস সেজেলি

2
অনুসন্ধান উভয় সামঞ্জস্যপূর্ণ (আমার উত্তর দেখুন) এবং স্বজ্ঞাত। এটি প্রাইমারিগুলির নাম অদ্ভুত বলে মনে হয় না। -এক্সেক মানে এক্সিকিউট, -প্রিন্ট মানে এটিকে প্রিন্ট করা, -নাম মানে কোনও নামের সাথে মেলে। অনুশীলনে, প্রাক্তন 3 এবং-টাইপ 95% ব্যবহারের ক্ষেত্রে কভার করে। অন্যান্য সমস্ত ক্ষেত্রে, মানুষ খুঁজে পেয়েছে।
মেল

3
@ টমাস আমি এক ঘন্টা আগে সম্পাদনা করেছি এবং আপনাকে বলেছিলাম যে অবস্থান ব্যতীত বিকল্প নেই। এবং সম্ভবত ls -R এটি ভাবতে আসে। অন্যান্য বিকল্পগুলি হ'ল জিইআইআই প্রোগ্রামগুলি যা অনুকরণ করে। অন্যথায় আপনার বিকল্পের বিকল্প আপনি কী করতে চান তা আপনাকে নির্দিষ্ট করে দিতে হবে। হাঁটুন দির গাছ? ফিল্টার ফাইলের নাম? আপনাকে বলুন কোন ফাইলগুলি নতুন?
মেল

উত্তর:


11

এটি একটি সাধারণ ভুল ধারণা হয়।

অপশন বাক্য গঠন অনুসরণ করুন। আপনি কেবল বিকল্পগুলির সাথে অভিব্যক্তি প্রাথমিকগুলি বিভ্রান্ত করছেন:

 find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
 [cmd][-->        options          <--] [--> arg0..argN  <--]

বিকল্প চিহ্নিত করা হয়। তবে এটি তার নিজস্ব এক্সপ্রেশন সিনট্যাক্স প্রয়োগ করে কারণ এটি ফিল্টার এবং ক্রিয়া বিকল্পগুলির আরও সমৃদ্ধ সেট সরবরাহ করে। এটি করতে পারে এমন কোনও বিকল্প নেই যা একই কাজ করতে পারে, কেবল কারণ এটি অনর্থক।


5
যদিও এটি আমার দোষ, এটি আমার প্রশ্নের উত্তর দেয় না।
ট্যামস সেজেলি

এক্সপ্রেশন (কেবলমাত্র একটি অনুমোদিত?), সেমিডি (ডিটো?), বিকল্পগুলি এবং অর্গগুলির মধ্যে পার্থক্য কী?
ব্যবহারকারী অচেনা

@ ব্যবহারকারী অজানা - ফাইন্ড কমান্ড এটির নিজস্ব এক্সপ্রেশন সিনট্যাক্স প্রয়োগ করে। এক্সপ্রেশনটি যখন দেওয়া হয়, তখন কমান্ড লাইনের শেষ যুক্তি। অনুপস্থিত থাকলে, অভিব্যক্তিটি প্রিন্টের সমাধান করে।
মেল

আহ - এখন আমি দেখতে পাচ্ছি, [সেন্টিমিটার] [অভিব্যক্তি] অনুসরণ করছে না, তবে এটির রেখার আগে একটি বর্ণনা রয়েছে।
ব্যবহারকারীর অজানা

2
ওপি দৃser়ভাবে জানিয়েছে যে find"বেশিরভাগ অন্যান্য ব্যবহারের থেকে বেদনাদায়কভাবে আলাদাভাবে প্যারামিটারগুলি আশা করা যায়"। আপনি উল্লেখ করেছেন যে ওপি "বিকল্পগুলির সাথে বিভ্রান্তিকর অভিব্যক্তি প্রাথমিক"। অন্যান্য বেশিরভাগ ব্যবহারে কি "এক্সপ্রেশন প্রাইমারী" ধারণা রয়েছে? যদি তা না হয় তবে ওপির বক্তব্য কি তা প্রমাণ করে না ? এবং এটি সত্যিই ব্যবহারের আজব অংশ নয় find। অন্য কোন সিআইএর সাথে জড়িত {}(কোনটি অবশ্যই অবশ্যই পালাতে হবে)?
কাইল স্ট্র্যান্ড

10

এটি আপনি নির্ভর করছেন তার সুনির্দিষ্ট কার্যকারিতার findউপর নির্ভর করে। যদি এটি (মূলত) সন্ধানকারী কার্যকারিতা হয় তবে কিছু শেল পুনরাবৃত্ত গ্লোবগুলিকে সমর্থন করে। উদাহরণস্বরূপ zsh:

% find . -name \*c
./a/b/foo.c
./a/bar.c
./baz.c
inoshiro% ls *.c
baz.c
% ls **/*.c 
a/bar.c  a/b/foo.c  baz.c

গ্লোব কোয়ালিফায়ারগুলির মাধ্যমে জেডএসের আরও অনেকগুলি সন্ধানের মতো সম্ভাবনা রয়েছে (শেষের দিকে দেখুন man zshexpn)। উদাহরণ স্বরূপ:

ls -l **/*(.)  ≈   find -type f -ls
ls *(m-2u:$USER:)  ≈  find -mtime -2 -user $USER

বাশ 4 এরও রয়েছে **/(আপনাকে এটি সক্ষম করার দরকার আছে shopt -s globstar) তবে গ্লোব কোয়ালিফায়ারের মতো কিছুই নয়।


10

আমি একবার তাকান locate। এটি এর ফাইলগুলির ডাটাবেসগুলির মধ্যে নজর রাখবে এবং দ্রুত যা পাবে তার নামগুলির সাথে মুদ্রণ করবে যা আপনি যা দেন তার সাথে মেলে।

kevin@box:~$ locate odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
/usr/share/gimp/2.0/help/en/gimp-tool-dodge-burn.html
....
kevin@box:~$ locate .odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
kevin@box:~$ 

আপনি দেখতে পাচ্ছেন, এটি একটি উপ-পাঠ্য মিল: আপনি যদি এটি দেন odgতবে এটি ডি অড ই ই মিলবে । আপনি যদি এটি দেন .odgতবে তা হবে না।

যদিও এখানে একটি নেতিবাচক দিক রয়েছে: এটির জন্য একটি ডাটাবেস দরকার। জিনিসগুলি পরিবর্তিত হলে এই ডাটাবেসটি আপডেট করা দরকার। যদিও আমার ফেডোরা 13 ইনস্টলটিতে এটি দৈনিক ক্রন্টাবের মধ্যে রয়েছে।


আমি ভালবাসিlocate
অ্যান্ড্রু ল্যামবার্ট

1
তদতিরিক্ত, অবস্থানগুলি নিদর্শনগুলিও গ্রহণ করে (আমি সম্প্রতি এটি শিখেছি)।
অ্যাডাম বাইরটেক

5

আপনি কি সন্ধান করার চেষ্টা করছেন? আপনি যদি সাধারণত উত্স কোড ফাইলগুলি অনুসন্ধান করে থাকেন তবে একবার দেখুন ack। এটি মূলত একটি উত্স কোড অনুসন্ধান সরঞ্জাম, তবে এসির -fসুইচ একটি প্রদত্ত ফাইল টাইপের সাথে মেলে এমন ফাইলগুলি সন্ধান করবে।

সুতরাং আপনি যদি কোনও ডিরেক্টরিতে সমস্ত পার্ল ফাইল সন্ধান করতে চান তবে উদাহরণস্বরূপ:

ack -f --perl

আপনি যদি সেই ফাইল টাইপগুলি পছন্দ করেন না যা এসকে স্বীকৃতি দেয় তবে আপনি নিজের মধ্যে এটি যুক্ত করতে পারেন ~/.ackrc

আক্ক কোনও সাধারণ-উদ্দেশ্যে ফাইল সন্ধানকারী findনয়, তবে আপনি যদি সোর্স কোড নিয়ে কাজ করছেন তবে এটি খুব সহজ হতে পারে।


1
এটি ব্যবহারকারী যা বলেছিল তা নয় তবে লোকেরা সোর্স কোডের সন্ধানের জন্য খুব দরকারী খুঁজে পেতে পারে (গ্রেপের মতো) সিলভার সন্ধানকারী , silversearcher-agমুখ্য ডিস্ট্রোজে প্যাকেজ।
পাবলো এ

-1

প্রতিটি প্রোগ্রামারকে শিখতে থাকা দুর্দান্ত জিনিসগুলির মধ্যে একটি হ'ল: আপনি যদি কোনও সরঞ্জাম না খুঁজে পান তবে নিজের তৈরি করুন!

#!/usr/bin/bash
find -name $<

-tফিল্টার ধরণের ইত্যাদি সহ আমি আরও ভাল লিখতে পারি etc.

সম্পাদনা করুন : উপরেরটি একটি বাশ স্ক্রিপ্ট। এটি কমান্ড লাইন আর্গুমেন্ট গ্রহণ করে এবং -name বিকল্পের মান হিসাবে এটি পাস করে। একটি সহজ উদাহরণ। যেহেতু আমি এই উত্তরটি রেখেছি, আমি এই অজগর স্ক্রিপ্টটি পেয়েছি:

https://github.com/sjl/friendly-find/

ইন্টারফেসটি দেখতে দুর্দান্ত লাগছে, তবে আমি এর কার্য সম্পাদন করিনি। চেক আউট মূল্য হতে পারে।


1
নিজস্ব সরঞ্জাম বিবৃতি তৈরির জন্য সত্য। তবে আপনার ছোট স্ক্রিপ্টটি কীভাবে কাজ করার কথা বলেছে তা অন্তত ব্যাখ্যা করুন।
জিপ্পি

1
$<আমার বাশে দরকারী কিছু করছে না। আপনি এটি কি করবেন বলে আশা করেন? আপনি "$@"আসলে বলতে চান ? বা "$1"(এটি একটি মেকফিলের মূলত যা বোঝায়)?
ট্রিপলি

1
@ ট্রিপলি - $<এর cshসমতুল্য read- আমি অনুমান করছি যে তার অর্থ এই ছিল।
ডার্কহার্ট

-2

ইউনিক্সে জিনিসগুলি সন্ধান করার সর্বাধিক স্ট্যান্ডার্ড উপায়।

du -a <directory>|grep <pattern>| awk  '{print $2}'

1
grep | awkএকটি প্রতিষেধক অকেজো ব্যবহারgrep দেখুন । আপনি যদি এই প্যাটার্নটিকে প্যারামিট্রাইজ করতে চান তবেdu -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
ট্রিপল করুন

@ ট্রিপলি এটি সম্পর্কে খুব সহায়ক তথ্য awk, তবে ইউনিক্স দর্শনের একটি বড় সুবিধা হ'ল কাঙ্ক্ষিত সঞ্চালন করতে পারে এমন পাইপলাইন নির্মাণের জন্য আরও জটিল সরঞ্জামগুলির (যেমন awkএবং find) সমস্ত বৈশিষ্ট্য বোঝার দরকার নেই one কাজ। grep | awkসর্বোত্তম না হতে পারে (বা, একটি উচ্চতর অনুকূলিতকরণের সাথে পারফরম্যান্ট মাল্টিথ্রেডেড সিস্টেমে grep, সম্ভবত এটি হবে!), তবে এটি সহজ
কাইল স্ট্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.