कैसे यूनिक्स में "एलएस" का उपयोग करते समय पहली निर्देशिकाओं को फिर फ़ाइलों आदि को सॉर्ट करें


91

मैं lsपहले निर्देशिकाओं और फिर फाइलों को दिखाने के लिए कमांड का उपयोग करना चाहूंगा । मैंने कोशिश की:

ls -la | sort -k 1

लेकिन मुझे एक गलत आदेश मिला।


ऐसा इसलिए -है क्योंकि dउपयोग करने से पहलेsort
निफ़ल

4
पुराने समय के यूनिक्स हेड (प्री-जीयूआई उम्र के लोग) अपने फोल्डर के नामों को कैपिटल करने के लिए इस्तेमाल करते थे और उस रिजल्ट को ऑटोमैटिकली प्राप्त करने के लिए प्लेन-फाइल के नाम को अनपेक्षित कर देते थे।
जेरोबर्ट

उपयोगी प्रश्न! शायद यह स्वीकृत उत्तर को बदलने का समय है जो सरल है और टर्मिनल रंगों को नहीं तोड़ता है?
इपिी

कोशिश करेंls -lh --group-directories-first
डायगो

जवाबों:


28

निम्न आदेश पहले निर्देशिकाओं को सूचीबद्ध करेगा, साधारण फ़ाइलों को दूसरा, और तीसरे को लिंक करेगा।

ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

इसके अलावा, यह कीस्ट्रोक्स को बचाने के लिए इस आदेश के लिए एक उर्फ बनाने के लिए बहुत मायने रखता है ।

संपादित करें:

यदि आप पहले निर्देशिका चाहते हैं, और फिर वह सब कुछ जो एक निर्देशिका दूसरा नहीं है, तो इसका उपयोग करें:

ls -la | grep "^d" && ls -la | grep -v "^d"


1
यह कमांड सब कुछ सूचीबद्ध नहीं करता है अगर वहाँ हैं, उदाहरण के लिए, फ़ोल्डर में सॉकेट्स या फीफो
स्टॉकर

1
उस संपादित संस्करण को अभी भी अन्य प्रकारों के साथ काम करना चाहिए। पहला grep वह सब कुछ कहता है जो एक 'd' से शुरू होता है, और दूसरा वह सब कुछ कहता है जो 'd' से शुरू नहीं होता है। निश्चित रूप से सब कुछ या तो विज्ञापन से शुरू होता है या ठीक से नहीं होता है?
Ry4an Brase

1
@ मर्क - सिर्फ क्यों नहीं ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total":?
FCTW

1
@ FCTW के कमांड को OSX उपनाम बनाने के लिए, इसे अपने ~ / .profile में जोड़ें:alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
aliteralmind

2
मुझे एक काम करने वाला छोटा नोटेशन मिला है: ls -la|grep ^d;ls -la|grep -v ^d(उद्धरण आवश्यक नहीं हैं और इसके &&साथ प्रतिस्थापित किया गया है ;)। एक अन्य विकल्प एक चर को लागू करना है और फिर इसका मूल्यांकन करना है a="ls -la|grep ^d";eval $a;eval $a -v:। जब अधिक विकल्प ls/ के लिए निर्दिष्ट किए जाते हैं तो पुनरावृत्ति से बचने के लिए उपयोगी हो सकता है grep। वहाँ भी है कि ls -la --group-directories-firstविकल्प है, लेकिन सबसे छोटा imo हैls -la|sort
स्टीवन Pribilinskiy

204

मैं इतना प्यार * निक्स और प्यार करता हूँ कि इन उत्तरों में से कुछ में जाने वाली आविष्कार को देखकर ...

GNU लिनक्स पर फैंसी के रूप में मेरा लगभग नहीं:

alias ls='ls --color -h --group-directories-first'

यह देखते हुए कि मैं अपने लिनक्स सीएलआई ऐप के साथ अधिक सहज हूं, मैं ओएसएक्स पर कोरुटिल्स को भी अपडेट करता हूं:

brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'

6
दुर्भाग्य से, यह ओएक्सएक्स टर्मिनल पर काम नहीं करता है, क्योंकि - विकल्प उपलब्ध नहीं है।
मेम

7
पुनः प्यार: क्या वह व्यंग्य है? यदि हां, तो मैं सहमत हूँ।
अल्लौरकोड

4
उपनाम एलएस का उद्देश्य उस कॉन्फ़िगरेशन तत्वों को परिभाषित करना है जो मैं 90% समय का उपयोग करना चाहता हूं। वांछित उत्पादन प्राप्त करने के लिए कम कीस्ट्रोक्स। यदि आप कभी भी देशी एलएस उत्पादन करना चाहते हैं तो आप हमेशा / बिन / एलएस कर सकते हैं।
जोनाथनस्साफ़िनी

4
@ एमईएम यदि आप ओएस एक्स का उपयोग कर रहे हैं और आपको टर्मिनल का उपयोग करने में मजा आता है, तो आपको brew install bash यह काम करना चाहिए ! :)
एंड्रयू एशबैकर ३०'१५

5
मेरी राय: यह स्वीकृत जवाब होना चाहिए था क्योंकि यह grep के एक दृढ़ सेट के बजाय लक्ष्य को पूरा करने के लिए एक कमांड-लाइन विकल्प को सूचीबद्ध करता है,
रयान ग्रिग्स

17

के लिए मैक उपयोगकर्ताओं coreutils :

brew install coreutils

alias ls='ls --color -h --group-directories-first'

मान लें कि आपका सिस्टम होमब्रे के लिए तैयार है :


7
glsबल्कि। सही?
पॉल आयरिश

1
हां, डिफ़ॉल्ट रूप से। आप डिफ़ॉल्ट रूप से कोरुटिल का उपयोग भी कर सकते हैं PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
बेलेश

7

कुछ चीजें हैं जो मैं एक निर्देशिका सूची में देखना चाहता हूं, और अब तक यहां कोई भी उत्तर नीचे की सभी आवश्यकताओं को पूरा नहीं करता है। निर्देशिका लिस्टिंग के लिए मेरी आवश्यकताएं:

  1. निर्देशिकाएँ और फाइलें वर्णानुक्रम में क्रमबद्ध हैं
  2. निर्देशिकाएँ पहले सूचीबद्ध हैं
  3. प्रतीकात्मक लिंक (सिमिलिंक) को फाइलों की तरह क्रमबद्ध किया जाता है
  4. छँटाई केस-असंवेदनशील है
  5. सॉर्टिंग एक फ़ाइल नाम में सभी प्रमुख गैर-अल्फा वर्णों को अनदेखा करता है
  6. लिस्टिंग में निर्देशिकाओं (छोड़कर ) ./और ../फ़ाइलों, और लिंक की कुल गणना शामिल है
  7. लिस्टिंग में निर्देशिकाओं और फ़ाइलों का कुल आकार (डिस्क उपयोग) शामिल है
  8. लिनक्स और विंडोज (Git Bash shell) पर लिस्टिंग को समान दिखना है - यह सही विकल्प पाने के लिए सबसे कठिन था क्योंकि --group-directories-firstविंडोज के लिए Git Bash में काम नहीं करना चाहिए।

के बारे में बहुत हैकिंग के बाद, मैं आखिरकार एक-लाइनर (एक बहुत लंबी लाइन; ;-)) के साथ आया, जिससे मैं संतुष्ट हूं। मैंने इसे 'dir' नाम के एक उपनाम को सौंपा है:

ls -dlF --color * .* | head -n2 && ls -AlF | LC_ALL=C grep "^d" | 
LC_ALL=C sort -k 9df && ls -AlF | LC_ALL=C grep "^[l-]" | 
LC_ALL=C sort -k 9df && echo -e `find -maxdepth 1 -type d ! -name . | 
wc -l` Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f | 
wc -l` File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | 
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l` Link\(s\)

चीजों को प्रबंधित करने के लिए आसान बनाने के लिए, मैं अपनी पसंद के हिसाब से डायरेक्टरी लिस्टिंग के प्रत्येक सेगमेंट को आउटपुट करने के लिए अलग-अलग कमांड के साथ आया, फिर &&ऑपरेटर का उपयोग करके उन्हें एक साथ इकट्ठा किया ।

  • ls -dlF --color * .* | head -n2- निकालें ./और ../। हम इन्हें पारित नहीं करना चाहते sortक्योंकि वे पहले से ही सही क्रम में हैं, और उन्हें क्रमबद्ध करने के परिणामस्वरूप ../पहले सूचीबद्ध किया जा सकता है । -dविकल्प "कुल" लाइन से छुटकारा पाने के लिए है; मुझे -Fनिर्देशिकाओं के लिए अनुगामी स्लैश दिखाने के लिए जोड़ना पसंद है (जब आप एक सादे करते हैं तो यह "@" के साथ सहानुभूति को भी चिह्नित करेगा ls -F)।

  • ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df- निर्देशिकाओं को निकालें और फ़ाइल नाम (9 वें कॉलम) द्वारा उन्हें सॉर्ट करें, दोनों गैर-अल्फ़ा / स्पेस कैरेक्टर ( dविकल्प) और कैरेक्टर केस ( fविकल्प) को अनदेखा करें । ls -Aविकल्प शामिल नहीं ./है और ../सूची से के बाद से हम पहले से ही उन्हें पिछले चरण में निकाली गई। मैं सभी को उपसर्ग करता हूं grepऔर लोकेल रीसेट के sortसाथ कमांड करता हूं LC_ALL=Cताकि (1) आउटपुट यूनिक्स गोले के अनुरूप हो, और (2) आप कभी-कभी तेजी से प्रदर्शन देख सकते हैं क्योंकि इसमें अब भारी यूटीएफ -8 कैरेक्टर का ओवरहेड सेट नहीं है से निपटें।

  • ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df - यह ऊपर दिए गए चरण के समान है, लेकिन इस बार हम फाइल और सिमिलिंक को सॉर्ट कर रहे हैं।

  • find -maxdepth 1 -type d ! -name . | wc -l-, छोड़कर ./और निर्देशिकाओं की संख्या प्राप्त करें ../

  • find -maxdepth 1 -type f | wc -l - फाइलों की संख्या प्राप्त करें।

  • find -maxdepth 1 -type l | wc -l - सहानुभूति की संख्या प्राप्त करें।

  • du -hs | cut -f 1 - मानव-पठनीय प्रारूप में सभी उपनिर्देशिकाओं के कुल आकार को निकालें।

  • find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1 - मानव-पठनीय प्रारूप में सभी फाइलों का कुल आकार निकालें।

आइए dirकार्रवाई में हमारे नए उपनाम देखें !

इससे पहले:

$ ls -alF
total 22
drwxr-xr-x   13 Tom      Administ     4096 Oct 25 02:38 ./
drwxr-xr-x    3 Tom      Administ        0 Dec 24  2014 ../
drwxr-xr-x   15 Tom      Administ     4096 Sep 17 01:23 .VirtualBox/
-rw-r--r--    1 Tom      Administ      615 Oct 25 02:38 .aliases
-rw-r--r--    1 Tom      Administ    12742 Oct 24 11:47 .bash_history
-rw-r--r--    1 Tom      Administ     3234 Oct 24 15:06 .bash_profile
drwxr-xr-x    1 Tom      Administ        0 Jan 24  2015 .gem/
-rw-r--r--    1 Tom      Administ      586 Oct 24 03:53 .gitconfig
drwxr-xr-x    1 Tom      Administ     4096 Dec 28  2014 .ssh/
drwxr-xr-x    4 Tom      Administ        0 Jan 24  2015 .travis/
-rw-r--r--    1 Tom      Administ     6645 Oct 25 02:38 _viminfo
-rw-r--r--    1 Tom      Administ     4907 Oct 24 15:16 profile
drwxr-xr-x    1 Tom      Administ        0 Oct 24 22:20 tmp/

उपरांत:

$ dir
drwxr-xr-x   13 Tom      Administ     4096 Oct 25 02:38 ./
drwxr-xr-x    3 Tom      Administ        0 Dec 24  2014 ../
drwxr-xr-x    1 Tom      Administ        0 Jan 24  2015 .gem/
drwxr-xr-x    1 Tom      Administ     4096 Dec 28  2014 .ssh/
drwxr-xr-x    1 Tom      Administ        0 Oct 24 22:20 tmp/
drwxr-xr-x    4 Tom      Administ        0 Jan 24  2015 .travis/
drwxr-xr-x   15 Tom      Administ     4096 Sep 17 01:23 .VirtualBox/
-rw-r--r--    1 Tom      Administ      615 Oct 25 02:38 .aliases
-rw-r--r--    1 Tom      Administ    12742 Oct 24 11:47 .bash_history
-rw-r--r--    1 Tom      Administ     3234 Oct 24 15:06 .bash_profile
-rw-r--r--    1 Tom      Administ      586 Oct 24 03:53 .gitconfig
-rw-r--r--    1 Tom      Administ     4907 Oct 24 15:16 profile
-rw-r--r--    1 Tom      Administ     6645 Oct 25 02:38 _viminfo
      5 Dir(s) 2.8M           6 File(s) 31K           0 Link(s)

एक मामूली नकारात्मक पहलू यह है कि आपके पास रंगीन लिस्टिंग नहीं हो सकती है, क्योंकि फ़ाइलनाम के आसपास के रंग नियंत्रण वर्ण छँटाई को भी अविश्वसनीय बनाते हैं।


अपडेट करें

जब एक गहरी फ़ाइल सिस्टम की मूल निर्देशिका से निष्पादित किया गया था, तो ऊपर दिया गया उपनाम बहुत धीमा था, इसलिए मैंने इस सरल लेकिन बहुत अधिक निष्पादित कमांड को अपडेट किया है:

ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'

नमूना उत्पादन:

$ dir
drwxr-xr-x 1 Tom     0 Mar 29 13:49 .aws/
drwxr-xr-x 1 Tom     0 Mar 29 13:49 .gem/
drwxr-xr-x 1 Tom     0 Mar 29 19:32 .ssh/
drwxr-xr-x 1 Tom     0 Mar 29 13:49 .zbstudio/
drwxr-xr-x 1 Tom     0 Jun 16  2016 temp/
drwxr-xr-x 1 Tom     0 Jul 13  2016 vimfiles/
-rw-r--r-- 2 Tom   365 Mar 30 10:37 .aliases
-rw-r--r-- 1 Tom 16028 Mar 30 12:12 .bash_history
-rw-r--r-- 2 Tom  2807 Mar 30 12:12 .bash_profile
-rw-r--r-- 2 Tom  2177 Mar 29 23:24 .functions
-rw-r--r-- 1 Tom  1091 Mar 30 10:34 .gitconfig
-rw-r--r-- 1 Tom  8907 Mar 29 14:45 _viminfo
-rw-r--r-- 1 Tom  2444 Jul 13  2016 _vimrc
33819 bytes

चूंकि विंडोज के लिए Git Bash के नए संस्करण का समर्थन करता है --group-directories-first, इसलिए हमें अब पीछे नहीं हटना होगा sort। हालांकि नया उर्फ ​​पिछली उर्फ ​​के रूप में अधिक जानकारी प्रदर्शित नहीं करता है, प्रदर्शन लाभ इसके लायक है। एक पर्क के रूप में, आपको रंग भी मिलते हैं!


बहुत बढ़िया जवाब! लेकिन जब आप कहते हैं, "बहुत हैकिंग के बाद, मैं आखिरकार एक-लाइनर के साथ आया ..." हां, वास्तव में यह क्लासिक अर्थों में "वन लाइनर" नहीं है। यह उस तर्क को लेने और इसे एक स्टैंडअलोन शेल स्क्रिप्ट बनाने के लिए समझ में आ सकता है और बस इसे चलाएं या इसे एक उपनाम के रूप में कहें।
जेकलॉल्ड

@JakeGould आप तेज हैं! मैंने अभी तक अपने उत्तर को प्रूफ-रीडिंग भी पूरा नहीं किया है और आपने पहले ही इसे पढ़ना समाप्त कर दिया है और एक टिप्पणी छोड़ दी है :)। हाँ, यह एक समारोह के लिए एक प्रमुख उम्मीदवार है, लेकिन मैं उस समय बहुत आलसी था, इसलिए बस इसे .bash_aliases फ़ाइल में फेंक दिया। दूसरी ओर, मैं आमतौर पर केवल एक फ़ंक्शन लिखता हूं जब मैं मापदंडों को पारित किए बिना कुछ नहीं कर सकता।
30

@ 10basetom: त्वरित प्रश्न: आप ls में कॉलम के लिए अलग-अलग रंग कैसे प्राप्त कर सकते हैं? मैं फ़ाइल नाम को ls --color का उपयोग करके फ़ाइल नाम रंग कर सकता हूं , लेकिन मुझे कॉलम के लिए उन सहायक रंगों को प्राप्त करने का कोई तरीका नहीं दिखता है। क्या राज हे?
पिरक्स

@Pirx मुझे विश्वास है कि कॉलम डिफ़ॉल्ट स्टैक एक्सचेंज सिंटैक्स हाइलाइटिंग :-) द्वारा रंगीन हैं।
बृहस्पतिवार

हां, यह मामला प्रतीत होता है, लेकिन यह एक महान विचार है, और समाधान ;-) में हैं;
पीरक्स

6

यदि आपको वर्णमाला क्रम रखना है, तो आपको कई विकल्प मिलेंगे।

आप बस कोशिश कर सकते हैं:

ls -लाल | सॉर्ट -k1 -r

या यह, एक ही अनुमति के साथ फ़ाइलों के लिए वर्णमाला क्रम रखने के लिए:

ls -लाल | सॉर्ट -k1,1 -k9,9 -r

या, जैसा कि ग्यारह81 ने कहा (लेकिन यह संस्करण सब कुछ सूचीबद्ध करता है):

ls -ला | grep "^ d" && ls -la | grep "^ -" && ls -al | grep -v "^ [d | -]"


1
यह एक अच्छा समाधान IMO है। छंटाई करने के लिए पाइपिंग के बजाय छंटाई करने के लिए कई प्रक्रियाओं और पाइपों का उपयोग करना पीछे की तरह लगता है। खासकर जब से ls- al|sort -k1 -rकाम करता है। जो गायब था वह सिर्फ -rझंडा है।
ब्राइस

@brice वह चीज जो मुझे 'सॉर्ट' के बारे में परेशान करती है, वह है ./और ../उस क्रम में पहली दो लाइनें नहीं होंगी। इसके अलावा, मैं मानता हूं कि यह अधिक कुशल समाधान है।
thdoan

आउटपुट कैसे रंग दें?
डेनिजेल

5

करने के लिए delerious010 के जवाब, मैं तुम्हें पुरानी शैली आदेश चाहते हैं कि जोड़ना होगा:

LANG=C ls -la --group-directories-first

(या LC_ALL या LANGUAGE या LC_COLLATE का उपयोग "C" पर सेट करें)।

यह कुछ ऐसा ही देगा:

.
..
DIR
Dir
dir
.hidden
123
UC_FILE
Uc_file
lc_file

हालाँकि, अगर मुझे सही से याद है, तो छिपी हुई डॉट फाइलें मूल रूप से निर्देशिकाओं से पहले दिखाई देती हैं।


2

यहाँ ऐसा करने के लिए एक फ़ंक्शन है (bash या zsh): और ... मैं सुझाव नहीं दे रहा हूं कि यह सबसे अच्छा तरीका है, लेकिन यह वही है जिसके साथ मैं आया हूं और अभी उपयोग कर रहा हूं:

समारोह lss
{
    # शीर्ष पर निर्देशिकाओं के साथ निर्देशिका लिस्टिंग दिखाता है।

    कमांड ls - रंग = हमेशा $ @ | egrep '^ d | कुल'
    कमांड ls - रंग = हमेशा $ @ | egrep -v '^ d | टोटल';
}

बस एक fyi यह काम करने के लिए प्रकट नहीं होता है। आपको ls -lफ़ाइल प्रकार द्वारा फ़िल्टर करने के लिए लंबी सूची प्रारूप ( ) का उपयोग करने की आवश्यकता है। इसके अलावा, यह कमांड रिक्त स्थान (बैश में) पर टूट जाएगा। आपको ऐसा करने की आवश्यकता है: "$@"यदि आप इस दृष्टिकोण का उपयोग करना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं:function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
छह

2

ls -laX आपको पहले वर्णमाला क्रम में निर्देशिकाएं दिखाएगा, लेकिन फ़ाइल सूची को खराब कर देगा।

लंबे विकल्प:

ls
    -l    # List
    --all
    -X    # Sort alphabetically by entry extension

यह केवल तभी काम करेगा जब आप पूरी तरह से निश्चित हो सकते हैं कि हर निर्देशिका के नाम में कोई बिंदु नहीं है।
ग्यारह ग्यारह

1

दूसरा रास्ता ...

find . -d 1 -type d | ls -la | sort -r 

या

ls -la | sort -r

या

d=`find . -type d -d 1`;f=`find . -type f -d 1`; echo -e -DIRS- "\n$d\n" -FILES- "\n$f"

ये क्या करते हैं? आपने उन्हें कहां लिखना सीखा?
तमारा विज्समैन

वैसे मेरा पसंदीदा ओएस डेबियन लिनक्स है। डेबियन के ग्नू कोर यूटिलिटी पैकेज संस्करण ls --show-directory-first ऑप्शन को सपोर्ट करता है ... जब मैंने OSX का उपयोग करना शुरू किया तो मैंने बस अपने डेबियन बॉक्स से अपनी सभी bash डॉट फाइल्स को पकड़ा और अपने होम डाइरेक्टरी में छोड़ दिया ... I बहुत सारे bash_aliases थे जो इतने टूट गए ... तब यह था कि मुझे अपने उपनामों के लिए कुछ काम-आसनों का पता लगाना था ...
एडी बी

पहले एक थोड़ा अतिरेक है ... निर्देशिकाओं के लिए क्रमबद्ध करने का कोई कारण नहीं है क्योंकि यह वह क्रम है जिसे हमें निर्देशिकाओं को संशोधित करने की आवश्यकता है ... 'ls -la | sort -r 'जो वास्तव में काम करता है। मूल रूप से यह बता रहा है ... 1) A) ढूंढें। -d 1 -type d (इस निर्देशिका से प्रारंभ करें, एक निर्देशिका की गहराई खोजें और केवल निर्देशिकाओं की खोज करें) B) ls -la (सूची सभी विशेषताएँ फ़ाइलें) C) उन्हें उल्टे 2 में क्रमबद्ध करें) 1 के रूप में करें) बस खोज छोड़ें। .. इसकी जरूरत नहीं है ... मुझे वास्तव में स्टडर्स का हल बेहतर लगा है ... :-)
एडी बी

1

टी एल; डॉ

alias ls='ls -lhF --color'

list_sorted() {
    ls $* | grep "^d";
    ls $* | grep "^-";
    ls $* | grep -v -E "^d|^-|^total"
}

alias ll=list_sorted

व्याख्या

मैं यहां दिए गए उत्तरों और टिप्पणियों में दिए गए समाधानों के संयोजन का उपयोग करता हूं।

चूक ls

सबसे पहले, मैं इसके लिए डिफ़ॉल्ट व्यवहार को अधिलेखित करता हूं ls:

  • -l: सूची को हमेशा एक आयामी, ऊर्ध्वाधर सूची के रूप में प्रदर्शित करें
  • -h: मानव-पठनीय शैली में फ़ाइल आकार प्रदर्शित करें (उदाहरण के लिए 4096 के बजाय 4.0K)
  • -F: निर्देशिकाओं के लिए एक अनुगामी स्लेश की तरह संकेतक प्रदर्शित करें
alias ls='ls -lhF --color'

विस्तृत ll

अगला, मैं एक फ़ंक्शन लिखता हूं जिसमें सॉर्टिंग लॉजिक है। प्रत्येक के लिए lsमैं किसी भी मूल रूप से पारित तर्क को पारित करता हूं। जो मुझे सूचीबद्ध करना चाहते हैं (यानी ls -a ~) की तुलना में एक अलग कार्यशील निर्देशिका से उपनाम का उपयोग करने में सक्षम बनाता है ।

इसके अलावा, प्रत्येक कॉल lsको एक grepकमांड पर पाइप किया जाता है । यहाँ, छँटाई होती है। ls -l | grep "^d"उदाहरण के लिए केवल निर्देशिकाओं को सूचीबद्ध करता है। यदि निर्देशिकाओं को पहले सूचीबद्ध किया जाना चाहिए, तो इसके लिए फ़ंक्शन में भी पहले आना आवश्यक है। अगली बात फाइलें हैं।

अंत में, मैं वह सब कुछ दिखाता हूं जो न तो एक निर्देशिका है और न ही एक फ़ाइल (न ही निर्देशिका सामग्री का कुल आकार दिखाने वाली रेखा)। यह निर्देशन, नियमित फ़ाइल प्रविष्टियों और कुल प्रविष्टि को पकड़कर और फिर -vतर्क के माध्यम से परिणाम प्राप्त करने के द्वारा किया जाता है।

list_sorted() {
    # List directories
    ls $* | grep "^d";
    # List regular files
    ls $* | grep "^-";
    # List everything else (e.g. symbolic links)
    ls $* | grep -v -E "^d|^-|^total"
}

अंत में, मैं फंक्शन को एक नए कमांड में देता हूं। विशेष रूप से मैं lsअपने कार्य को कुछ परिदृश्यों में तोड़ने की स्थिति में अधिलेखित नहीं करना चाहता । तब मैं उपयोग करने में सक्षम होना चाहता हूं ls। वैकल्पिक रूप से, आप हमेशा अन-अलियास किए गए lsकमांड को इनवॉइस करके भेज सकते हैं \ls

alias ll=list_sorted

टिप्पणियाँ

  • मैं कमांड के लिए एक सीमांकक के ;बजाय उपयोग करता हूं &&। अन्यथा, कोई निर्देशिका की सामग्री को सूचीबद्ध करने में असमर्थ है जिसमें निर्देशिका नहीं है (पहला एलएस कमांड गलत का मूल्यांकन करता है, इस प्रकार अगले कमांड के निष्पादन की अनुमति नहीं देता है क्योंकि यह युग्मित है &&। इससे ;बचा जाता है।)

0

यह एक स्क्रिप्ट समाधान है। सूची में केवल नाम, कोई इनोड डेटा, वर्णानुक्रम नहीं, केस संवेदी नहीं, कॉलम में स्वरूपित। हालाँकि यह पंक्ति प्रमुख के बजाय पंक्ति-प्रमुख है क्योंकि एलएस के डिफ़ॉल्ट आउटपुट की तरह। > 26 वर्णों के साथ फ़ाइल नाम होने पर कॉलम थोड़ा गड़बड़ हो जाता है।

rm -f /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout

IFS=$'\n' read -d '' -r -a lines < /tmp/lsout

printf "%-24s  %-24s  %-24s\n" "${lines[@]}"

और दूसरा, कुछ अतिरिक्त स्वरूपण के साथ।

rm -f /tmp/lsout
echo "  ---- Directories ---- " >> /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s  %-24s  %-24s\n" "${lines[@]}"

rm -f /tmp/lsout
echo "  ------- Files ------- " >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s  %-24s  %-24s\n" "${lines[@]}"

पिछले एक के लिए आउटपुट निम्न की तरह दिखता है, रंगों को घटाता है:

  ---- Directories ----   archive/                  bookmarks/              
Desktop/                  Documents/                Downloads/              
fff/                      health/                   Library/                
Movies/                   Music/                    Pictures/               
Public/                   rrf/                      scifi/            
testdir/                  testdir2/                                         
  ------- Files -------   @todo                     comedy            
delme                     lll                       maxims                  
schedule                  vtokens style

बस इस स्क्रिप्ट को कॉल करने के बाद एलएस के डिफ़ॉल्ट व्यवहार को बदलने या बदलने के लिए नहीं याद रखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.