বর্তমান ডিরেক্টরিটির সাব-ডাইরেক্টরিগুলি তালিকাভুক্ত করার কোনও সঠিক উপায় আছে কি?


10

আমি এর দ্বারা একটি ডিরেক্টরি এর উপ-ডিরেক্টরিগুলি খুঁজে পেতে পারি

ls -d -- */

অথবা

ls -l | grep "^d"

তবে এগুলি উভয়ই অপ্রত্যক্ষ বলে মনে হচ্ছে এবং আমি কল্পনা করব যে কেবল ডিরেক্টরিগুলি খুঁজে পাওয়ার জন্য একটি আদর্শ উপায় থাকবে। এটি করার কোন সঠিক উপায় আছে? এবং যদি তা না হয় তবে এগুলির দুটিই কি প্রান্তের ক্ষেত্রে অনাকাঙ্ক্ষিত আচরণের দিকে পরিচালিত করবে? (সিম্বলিক লিঙ্ক, লুকানো ডিরেক্টরি ইত্যাদি)

উত্তর:


17

উত্তর আপনি যা খুঁজছেন তার চেয়ে বেশি আউটপুট নিয়ে আপনি কী করতে চান তার উপর নির্ভর করবে । যদি আপনি কেবল টার্মিনালে ভিজ্যুয়াল রেফারেন্সের জন্য একটি তালিকা দেখতে চান তবে আপনার প্রথম সমাধানটি আসলে বেশ সুন্দর। আপনি যদি আউটপুটটি প্রক্রিয়া করতে চান তবে আপনার অন্য একটি পদ্ধতি ব্যবহার করা উচিত।

সবচেয়ে জোরালো উপায় অন্য প্রোগ্রামে ফিড জানতে-- একটি ব্যবহার হয় find

find -maxdepth 1 -type d

কারণ এই ফিড জন্য ভাল যে findকরতে পারেন আউটপুট ডেটা ব্যবহার NULLs দ্বারা পৃথক -print0বা সঠিকভাবে ব্যবহার করে অন্য প্রোগ্রাম আর্গুমেন্ট হিসাবে স্ট্রিং অব্যাহতি -exec। কেন এল এর আউটপুট পার্সিংয়ের চেয়ে ভাল এই বিষয়ে রেফারেন্সের জন্য, গ্রেগের উইকিতে পার্সিংএলএস দেখুন ।


4
find . -maxdepth 1 -type dওএস এক্স ইয়োসেমাইটে কাজ করতে আমাকে টাইপ করতে হয়েছিল।
শন লেভিন

1
সাব ডিরেক্টরিগুলি তালিকাভুক্ত করতে, একটিকে যেমন -Mindepth নির্দিষ্ট করতে হবে তেমন find . -maxdepth 1 -mindepth 1 -type d। অন্যথায়, বর্তমান ডিরেক্টরি .অন্তর্ভুক্ত করা হবে।
tinlyx

5

অবগতির জন্য - ইন ZSH (কিন্তু bash), সেই জন্যই এই করতে পারেন: ls -d -- *(/); পরিবর্তক শুধুমাত্র উল্লিখিত glob ডিরেক্টরি থেকে ZSH বলে।(/)

এটি বলেছিল, এটি আপনার নিজস্ব প্রস্তাবিত সমাধান ( ls -d -- */) থেকে খুব আলাদা নয় এবং এটি মান থেকে অনেক দূরে।

যতদূর আউটপুট ls(যা সম্ভবত অন্যান্য পতাকাগুলির উপর ভিত্তি করে পৃথক হয়):

% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2

zsh সমস্ত ফাইল এবং ডিরেক্টরিতে তারকাচিহ্ন প্রসারিত করে, (/) পতাকাটি সেই সম্প্রসারণের অংশগুলি নির্বাচন করে যাতে ls * (/) এছাড়াও কাজ করবে, পাশাপাশি প্রতিধ্বনি * (/) , অথবা আরও zshly উপায়ে মুদ্রণ -l * (/ ) । দুটি প্রথম সংস্করণ বাশে কাজ করে।
থোর

1
নোট করুন যে *(/)গোপনীয় নয় এমন ডিরেক্টরিতে */প্রসারিত হয় যখন অ গোপনীয় ডিরেক্টরিগুলিতে বা ডিরেক্টরিগুলিতে সিমলিংকগুলি প্রসারিত হয় (বা কমপক্ষে সিমলিংকগুলিতে যে পথে আমরা বলতে পারি যে সেগুলি ডিরেক্টরি)।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.