मैं ls
पहले निर्देशिकाओं और फिर फाइलों को दिखाने के लिए कमांड का उपयोग करना चाहूंगा । मैंने कोशिश की:
ls -la | sort -k 1
लेकिन मुझे एक गलत आदेश मिला।
ls -lh --group-directories-first
मैं ls
पहले निर्देशिकाओं और फिर फाइलों को दिखाने के लिए कमांड का उपयोग करना चाहूंगा । मैंने कोशिश की:
ls -la | sort -k 1
लेकिन मुझे एक गलत आदेश मिला।
ls -lh --group-directories-first
जवाबों:
निम्न आदेश पहले निर्देशिकाओं को सूचीबद्ध करेगा, साधारण फ़ाइलों को दूसरा, और तीसरे को लिंक करेगा।
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
इसके अलावा, यह कीस्ट्रोक्स को बचाने के लिए इस आदेश के लिए एक उर्फ बनाने के लिए बहुत मायने रखता है ।
संपादित करें:
यदि आप पहले निर्देशिका चाहते हैं, और फिर वह सब कुछ जो एक निर्देशिका दूसरा नहीं है, तो इसका उपयोग करें:
ls -la | grep "^d" && ls -la | grep -v "^d"
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total"
:?
alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
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
मैं इतना प्यार * निक्स और प्यार करता हूँ कि इन उत्तरों में से कुछ में जाने वाली आविष्कार को देखकर ...
GNU लिनक्स पर फैंसी के रूप में मेरा लगभग नहीं:
alias ls='ls --color -h --group-directories-first'
यह देखते हुए कि मैं अपने लिनक्स सीएलआई ऐप के साथ अधिक सहज हूं, मैं ओएसएक्स पर कोरुटिल्स को भी अपडेट करता हूं:
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
brew install bash
यह काम करना चाहिए ! :)
के लिए मैक उपयोगकर्ताओं coreutils :
brew install coreutils
alias ls='ls --color -h --group-directories-first'
मान लें कि आपका सिस्टम होमब्रे के लिए तैयार है :
gls
बल्कि। सही?
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
।
कुछ चीजें हैं जो मैं एक निर्देशिका सूची में देखना चाहता हूं, और अब तक यहां कोई भी उत्तर नीचे की सभी आवश्यकताओं को पूरा नहीं करता है। निर्देशिका लिस्टिंग के लिए मेरी आवश्यकताएं:
./
और ../
फ़ाइलों, और लिंक की कुल गणना शामिल है--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
। हालांकि नया उर्फ पिछली उर्फ के रूप में अधिक जानकारी प्रदर्शित नहीं करता है, प्रदर्शन लाभ इसके लायक है। एक पर्क के रूप में, आपको रंग भी मिलते हैं!
यदि आपको वर्णमाला क्रम रखना है, तो आपको कई विकल्प मिलेंगे।
आप बस कोशिश कर सकते हैं:
ls -लाल | सॉर्ट -k1 -r
या यह, एक ही अनुमति के साथ फ़ाइलों के लिए वर्णमाला क्रम रखने के लिए:
ls -लाल | सॉर्ट -k1,1 -k9,9 -r
या, जैसा कि ग्यारह81 ने कहा (लेकिन यह संस्करण सब कुछ सूचीबद्ध करता है):
ls -ला | grep "^ d" && ls -la | grep "^ -" && ls -al | grep -v "^ [d | -]"
ls- al|sort -k1 -r
काम करता है। जो गायब था वह सिर्फ -r
झंडा है।
./
और ../
उस क्रम में पहली दो लाइनें नहीं होंगी। इसके अलावा, मैं मानता हूं कि यह अधिक कुशल समाधान है।
करने के लिए 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
हालाँकि, अगर मुझे सही से याद है, तो छिपी हुई डॉट फाइलें मूल रूप से निर्देशिकाओं से पहले दिखाई देती हैं।
यहाँ ऐसा करने के लिए एक फ़ंक्शन है (bash या zsh): और ... मैं सुझाव नहीं दे रहा हूं कि यह सबसे अच्छा तरीका है, लेकिन यह वही है जिसके साथ मैं आया हूं और अभी उपयोग कर रहा हूं:
समारोह lss { # शीर्ष पर निर्देशिकाओं के साथ निर्देशिका लिस्टिंग दिखाता है। कमांड ls - रंग = हमेशा $ @ | egrep '^ d | कुल' कमांड ls - रंग = हमेशा $ @ | egrep -v '^ d | टोटल'; }
ls -l
फ़ाइल प्रकार द्वारा फ़िल्टर करने के लिए लंबी सूची प्रारूप ( ) का उपयोग करने की आवश्यकता है। इसके अलावा, यह कमांड रिक्त स्थान (बैश में) पर टूट जाएगा। आपको ऐसा करने की आवश्यकता है: "$@"
यदि आप इस दृष्टिकोण का उपयोग करना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं:function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
ls -laX
आपको पहले वर्णमाला क्रम में निर्देशिकाएं दिखाएगा, लेकिन फ़ाइल सूची को खराब कर देगा।
लंबे विकल्प:
ls
-l # List
--all
-X # Sort alphabetically by entry extension
दूसरा रास्ता ...
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"
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
;
बजाय उपयोग करता हूं &&
। अन्यथा, कोई निर्देशिका की सामग्री को सूचीबद्ध करने में असमर्थ है जिसमें निर्देशिका नहीं है (पहला एलएस कमांड गलत का मूल्यांकन करता है, इस प्रकार अगले कमांड के निष्पादन की अनुमति नहीं देता है क्योंकि यह युग्मित है &&
। इससे ;
बचा जाता है।)यह एक स्क्रिप्ट समाधान है। सूची में केवल नाम, कोई इनोड डेटा, वर्णानुक्रम नहीं, केस संवेदी नहीं, कॉलम में स्वरूपित। हालाँकि यह पंक्ति प्रमुख के बजाय पंक्ति-प्रमुख है क्योंकि एलएस के डिफ़ॉल्ट आउटपुट की तरह। > 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
बस इस स्क्रिप्ट को कॉल करने के बाद एलएस के डिफ़ॉल्ट व्यवहार को बदलने या बदलने के लिए नहीं याद रखें।
-
है क्योंकिd
उपयोग करने से पहलेsort