লিনাক্সের প্রস্থ-প্রথম বিকল্পটি 'ইউটিলিটি' খুঁজে পাবে?


12

লিনাক্স-ফাইন্ড 'ইউটিলিটিতে কোনও প্রস্থ-প্রথম / গভীরতা-প্রথম বিকল্প রয়েছে?

উত্তর:


5

খুঁজে পাওয়ার জন্য অন্তর্নির্মিত কিছুই নেই, এমনকি জিএনইউ অনুসন্ধানও। findস্ল্যাশের সংখ্যা অনুসারে বাছাইয়ের আউটপুট পোস্টপ্রসেস করতে পারেন, উদাহরণস্বরূপ পার্ল সহ:

find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
  • <> সমস্ত ইনপুট লাইনের তালিকা;
  • $a =~ s!/!/!gস্ল্যাশের সংখ্যা হ'ল $a, যা আমরা বাছাইয়ের মানদণ্ড হিসাবে ব্যবহার করি।

আপনি যদি zsh ব্যবহার করতে পারেন:

echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
  • **/* বর্তমান ডিরেক্টরি এবং সাব ডিরেক্টরি ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করে।
  • প্রথম বন্ধনীর ভিতরে থাকা উপাদানগুলি গ্লোব কোয়ালিফায়ার।
  • oeগ্লোব কোয়ালিফায়ার ক্রমগুলি নিয়ন্ত্রণ করে যেখানে ম্যাচগুলি ফিরে আসে: তারা REPLYকোডটি এখানে চালানোর পরে প্রতিটি ম্যাচের জন্য উদ্ধৃতিতে REPLYপ্রাথমিকভাবে ম্যাচের পথে সেট করা মান অনুসারে বাছাই করে ।
  • বলেছে কোড $REPLYস্ল্যাশ বাদে সবকিছু মুছতে রূপান্তর করে। সুতরাং ফলাফলের গভীরতা 1 (খালি ফলাফল $REPLY) এর সমস্ত কিছু রয়েছে, তারপরে গভীরতা 2 ( $REPLYশেষ পর্যন্ত হওয়া /), গভীরতা 3 ( //) ইত্যাদি রয়েছে everything

1
বাছাই পোস্ট প্রক্রিয়াটি খুব আকর্ষণীয়, তবে, সাজানোর জন্য সম্পূর্ণ হওয়াটির সন্ধান প্রয়োজন এবং আপনার বিরতি নিয়ন্ত্রণ করার সুযোগ থাকবে না।
Xiè Jìléi


1

আমার অনুভূতি হ'ল তুমি পারো এটি গ্রেপ এবং এই জাতীয় এবং একটি লুপ জড়িত, কিন্তু আমি এটি খুব ভাল কাজ করে, বিশেষত আপনার ক্ষেত্রে এটি সম্পন্ন করা প্রয়োজন হয় না সম্পর্কিত ক্ষেত্রে ক্ষেত্রে জন্য।

এটি আরও সংস্থার নিবিড় কারণে:

  • প্রচুর কাঁটাচামচ
  • প্রচুর সন্ধান
  • বর্তমানের গভীরতার আগে প্রতিটি ডিরেক্টরি ফাইলের কাঠামোর মোট গভীরতা যতবার পেয়েছে ততবার অনুসন্ধান করে (আপনার যদি কার্যত পরিমাণে র‌্যাম থাকে তবে এটি কোনও সমস্যা হবেনা ...)

এটি ভাল কারণ:

  • এটি ব্যাশ এবং বেসিক gnu সরঞ্জাম ব্যবহার করে
  • যখনই আপনি চান এটি ভাঙ্গা যেতে পারে (যেমন আপনি দেখেছেন যে আপনি কী দ্বারা উড়ে যাচ্ছিলেন)
  • এটি প্রতি লাইনে কাজ করে এবং প্রতি সন্ধান অনুসারে কাজ করে না, সুতরাং পরবর্তী কমান্ডগুলিতে অনুসন্ধান এবং বাছাইয়ের জন্য অপেক্ষা করতে হবে না
  • এটি প্রকৃত ফাইল সিস্টেম বিভাজনের উপর ভিত্তি করে কাজ করে, সুতরাং আপনার যদি স্ল্যাশ সহ একটি ডিরেক্টরি থাকে তবে এটি এর চেয়ে গভীরতর তালিকাভুক্ত হবে না; যদি আপনার কোনও পৃথক পথ বিভাজক কনফিগার করা থাকে তবে আপনি এখনও ঠিক আছেন।
#! / বিন / ব্যাশ 
গভীরতা = 0

যখন -মাইন্ডেপথ $ গভীরতা -ম্যাক্সডেপথ $ গভীরতা | গ্রেপ '।'
করা
    গভীরতা = $ (গভীরতা + 1)
সম্পন্ন

আপনি এটি সহজেই এক লাইনে ফিট করতে পারেন (?) সহজেই:

depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done

তবে আমি টাইপ করার চেয়ে ছোট স্ক্রিপ্ট পছন্দ করি ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.