ls -l --group-ডিরেক্টরি-প্রথম (symlinks এছাড়াও কাজ)


9

lsবিকল্পের --group-directories-firstফলে ডিরেক্টরিগুলি শীর্ষে তালিকাভুক্ত হয়, যা আউটপুটটিকে lsসুন্দর এবং পরিষ্কার করে তোলে :

ls -l --group-directories-first

তবে এটি এতে কাজ করে না symlinks, যা আসলে symlinksডিরেক্টরিতে হয়। ব্যবহার করার সম্ভাবনা রয়েছে

ls -l -L --group-directories-first

যা উপরে উভয় প্রকারের ডিরেক্টরি তালিকাভুক্ত করবে, তবে সঠিক ডিরেক্টরি এবং সিমলিঙ্কযুক্ত ডিরেক্টরিতে পার্থক্য করবে না, যা আবার বিভ্রান্তিকর।

lsনিয়মিত ডিরেক্টরি থেকে আলাদা করে রেখেও কি উপরের সিমলিঙ্কযুক্ত ডিরেক্টরিগুলি প্রদর্শন করতে পারে ?

সম্পাদনা: আমি ব্যবহার করছি bash


এটি অংশ হিসাবে আইডিজিঙ্ক্র্যাটিক আচরণ lsstat()সিস্টেম কল অনুসারে একটি ডিরেক্টরিতে একটি প্রতীকী লিঙ্কটি এখনও একটি ডিরেক্টরি ( S_ISDIR(st_mode)সত্যটি ফিরে আসবে)। এটি চেক করার আগে প্রতীকীভাবে প্রতীকগুলি lsছাড় দেয় ।
গোল্ডিলোক

2
@goldilocks, না, lsনা lstat()(এবং readlinksymlinks জন্য) যদি না আপনি ব্যবহার -Lবিকল্প (যে ক্ষেত্রে এটি ব্যবহার করে stat())
Stéphane Chazelas

@ স্টাফেনচাজেলাস: হুম, লাইভ এবং শিখুন। আমি ভেবেছিলাম যে S_ISLNK(st_mode)এছাড়াও মাধ্যমে সত্য ফিরে stat(), কিন্তু এটা না - এটি শুধুমাত্র মাধ্যমে তাই আছে lstat()। লিঙ্কটি কোনও লিঙ্কের লিঙ্ক হলেও আইএসএলএনকে স্ট্যাটের মাধ্যমে সত্যটি দেয় না। অর্থ যে ISLNKস্ট্যাটাসের মাধ্যমে কখনও সত্য হতে পারে না, যদিও এটি এক ধরণের অনির্ধারিত ...
গোল্ডিলকস

@ গল্ডিলোকস, statআপনাকে সিমলিংকের (গুলি) শেষে ফাইলের বৈশিষ্ট্যগুলি সরবরাহ করে। যদি তা বিদ্যমান না থাকে বা অ্যাক্সেসযোগ্য না হয়, তবে statএকটি ENOENT ফেরত দেয়, তাই যা ফিরে আসে statতা কখনই কোনও সিমলিংক হবে না। stat()আপনাকে কখনই সিমলিংক সম্পর্কে কিছু বলবে না, ঠিক যেমনটি openকখনই সিমলিংকটি খুলবে না, বা chmod()কোনও সিমলিংকের অনুমতি পরিবর্তন করবে না ... ইত্যাদি
স্টাফেন চ্যাজেলাস

উত্তর:


5

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

mll() {
  (($#)) || set -- *(N-/) *(N^-/)
  (($#)) && ls -ldU -- $@
}

আপনি যেমন একটি গ্লোব্বিং সাজানোর অর্ডার সংজ্ঞায়িত করতে পারেন:

dir1st() { [[ -d $REPLY ]] && REPLY=1-$REPLY || REPLY=2-$REPLY;}

এবং এটি ব্যবহার করুন:

ls -ldU -- *(o+dir1st)

এই পদ্ধতিতে, আপনি এটি অন্য কমান্ডগুলির চেয়ে বিভিন্ন বিকল্পের সাথে lsবা এর সাথে ব্যবহার করতে পারেন ls, বা বিভিন্ন নিদর্শনগুলির জন্য যেমন:

ls -ldU -- .*(o+dir1st) # to list the hidden files and dirs

বা:

ls -ldU -- ^*[[:lower:]]*(o+dir1st) # to list the all-uppercase files and dirs

আপনার যদি ব্যবহার করতে হয় bashতবে সমমানেরটি এর মতো হবে:

mll() (
  if (($# == 0)); then
    dirs=() others=()
    shopt -s nullglob
    for f in *; do
      if [[ -d $f ]]; then
        dirs+=("$f")
      else
        others+=("$f")
      fi
    done
    set -- "${dirs[@]}" "${others[@]}"
  fi
  (($#)) && exec ls -ldU -- "$@"
)

bashগ্লোব্বিং কোয়ালিফায়ার বা গ্লোবগুলির বাছাইয়ের ক্রমকে প্রভাবিত করার কোনও উপায় নেই, বা প্রতি-গ্লোব ভিত্তিতে নালগ্লোব ঘুরিয়ে দেওয়ার কোনও উপায় নেই, বা বিকল্পগুলির জন্য স্থানীয় প্রসঙ্গ আছে (সাবসেল শুরু করা ছাড়া অন্য, সুতরাং উপরের ()পরিবর্তে {}) আফাইক ।


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