find . -type d
কিছু সূচনা পয়েন্টের নীচে সমস্ত ডিরেক্টরি খুঁজে পেতে ব্যবহার করা যেতে পারে। তবে এটি বর্তমান ডিরেক্টরিটিও ( .
) প্রদান করে যা অনাকাঙ্ক্ষিত হতে পারে। কীভাবে বাদ দেওয়া যায়?
find . -type d
কিছু সূচনা পয়েন্টের নীচে সমস্ত ডিরেক্টরি খুঁজে পেতে ব্যবহার করা যেতে পারে। তবে এটি বর্তমান ডিরেক্টরিটিও ( .
) প্রদান করে যা অনাকাঙ্ক্ষিত হতে পারে। কীভাবে বাদ দেওয়া যায়?
উত্তর:
find . ! -path . -type d
এই বিশেষ ক্ষেত্রে ( .
) জন্য, mindepth
সমাধানের চেয়ে গল্ফগুলি ভাল (24 বনাম 26 অক্ষর), যদিও এটি সম্ভবত কারণটি টাইপ করা কিছুটা কঠিন !
।
অন্যান্য ডিরেক্টরি বাদ দিতে, এটি কম ভাল গল্ফ হবে এবং DRYness জন্য একটি পরিবর্তনশীল প্রয়োজন:
D="long_name"
find "$D" ! -path "$D" -type d
আমার সিদ্ধান্ত গাছ !
এবং এর মধ্যে -mindepth
:
!
বহনযোগ্যতার জন্য ব্যবহার করুন ।.
? একটি মুদ্রা নিক্ষেপ।long_name
? ব্যবহার -mindepth
।find / ! -regex '/\(a\|b\)/.*'
গ্রেপের মাধ্যমে পাইপ ব্যবহার করতে পারেন বা আরও সহজভাবে করতে পারেন । না recurse করতে, উপরে খুব অদক্ষ হবে এবং আপনি ব্যবহার করা উচিত -prune
: stackoverflow.com/questions/1489277/...
find
সঙ্গে grep
ডিরেক্টরি বাদ দেওয়ার কিন্তু পেরেন্ট ডাইরেক্টরি এখনও ছিল যার ফলে সবকিছু যাহাই হউক না কেন মুছে ফেলা হবে।
find
, আপনি উপশব্দের জন্য চেক করতে হবে চাই: stackoverflow.com/questions/17959317/... কিন্তু লুপ এটি পরিচালনা করতে একটি ব্যাশ :-)
\!
নিরাপদে পাশে থাকতে সম্ভবত উদ্দীপনা চর ( ) এড়িয়ে যেতে চান । আমার মেশিনের সমস্ত উদাহরণ man find
এটি পালিয়ে গেছে তাই দেখে মনে হচ্ছে এটি সম্ভবত একটি ভাল ধারণা ™ সম্পাদনা করুন - সবেমাত্র এটি লক্ষ্য করা গেছে এমনকি স্পষ্টভাবে বলেছেন:! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
পরামিতি find
দ্বারা কেবল পুনরাবৃত্তির গভীরতা নিয়ন্ত্রণ করা যায় -maxdepth
না, সংশ্লিষ্ট -mindepth
পরামিতি ব্যবহার করে গভীরতাটি "শীর্ষ" থেকেও সীমাবদ্ধ করা যায় । সুতরাং আসলে যা প্রয়োজন তা হ'ল:
find . -mindepth 1 -type d
find . -mindepth 1 -maxdepth 1 -type d ...
আমি find ./* <...>
যখন প্রথম স্তরের ডটফাইলগুলি উপেক্ষা করার বিষয়ে কিছু মনে করি না তখন ( *
গ্লোব বাশ-এ ডিফল্টরূপে এটি মেলে না - শপটি বিল্টিনে 'ডটগ্লোব' বিকল্পটি দেখুন: https://www.gnu.org/software/bash /manual/html_node/The-Shopt- বুলেটিন এইচটিএমএল )।
গ্রহন টিএমপি # সন্ধান করুন। । ./screen ./screen/.testfile2 ./.X11-unix ./.ICE-unix ./tmux-0 ./tmux-0/default
গ্রহন টিএমপি # সন্ধান করুন। ./screen ./screen/.testfile2 ./tmux-0 ./tmux-0/default
-exec
বিকল্প সহ এই কৌশলটি ব্যবহার করবেন না । উদাহরণস্বরূপ, যদি আপনি চেষ্টা করেন তবে আপনি find dir/* -type d -exec rmdir {} \;
ত্রুটিগুলি দেখতে পাবেন।
rmdir
সম্ভবত আসছে এবং আপনাকে বলছে যে ডিরেক্টরিগুলি খালি নয় কারণ ডিরেক্টরিগুলি find
একটি গভীরতার সাথে প্রথম অনুসন্ধান করবে, যা তাদের সন্তানের আগে পিতামাতাকে দেখায়।
ঠিক আছে, পাশাপাশি একটি সাধারণ কাজ (সমাধানটি উইন্ডোজ গিট ব্যাশে আমার পক্ষে কাজ করছে না)
find * -type d
এটি খুব পারফরম্যান্স নাও হতে পারে, তবে কাজটি সম্পন্ন করে, এবং আমাদের মাঝে মাঝে এটি প্রয়োজন।
[সম্পাদনা]: @ অ্যালেক্সান্ডারমিলস মন্তব্য হিসাবে এটি মূল অবস্থানের (যেমন ./.hidden
) গোপন ডিরেক্টরিগুলি প্রদর্শন করবে না , তবে এটি লুকানো সাব-ডাইরেক্টরিগুলি (উদাহরণস্বরূপ ./folder/.hiddenSub
) প্রদর্শন করবে । [উইন্ডোজে গিট ব্যাশ দিয়ে পরীক্ষিত]
find /path/ ! -path "/path/first" ! -path "/path/second"
হয় তবে কেবল এটিই কি একমাত্র পথ?