ls -l --group-directory-first (सिमिलिंक पर कार्य करें)


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()(और सहानुभूति के readlinkलिए) जब तक आप -Lविकल्प का उपयोग नहीं करते हैं (जिस स्थिति में वह उपयोग करता है stat())
स्टीफन चेज़लस

@ स्टेफ़ेनचेज़लस: हम्म, जीना और सीखना। मैंने सोचा था कि यह S_ISLNK(st_mode)भी सच है stat(), लेकिन यह नहीं है - यह केवल के माध्यम से ऐसा करता है lstat()। यह भी है कि ISLNK स्टेट के माध्यम से सही नहीं लौटता है, भले ही लिंक एक लिंक के लिए लिंक हो। इसका अर्थ है कि ISLNKस्टेट के माध्यम से कभी भी सही नहीं हो सकता है, हालांकि यह अनिर्दिष्ट है ...
गोल्डीलॉक्स

@goldilocks, statआपको सिमलिंक (ओं) के अंत में फ़ाइल के गुण प्रदान करता है। यदि वह मौजूद नहीं है या पहुंच योग्य नहीं है, तो statएक रिटर्न देता है, इसलिए जो लौटाया जाता है 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?
मार्टिन वेग्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.