फ़ाइल एक्सटेंशन और फिर नाम से एलएस सॉर्ट कैसे करें?


44

डिफ़ॉल्ट रूप से ls कमांड केवल फ़ाइल नाम से सॉर्ट करता है, लेकिन मैं चाहता हूं कि निर्देशिका अन्य फ़ाइल प्रकारों से पहले दिखाई दे। मैं यह भी चाह सकता हूं कि फाइलें एक्सटेंशन के आधार पर सॉर्ट की जा सकती हैं, जैसे कि टाइप कॉलम द्वारा विंडोज एक्सप्लोरर सॉर्ट करता है। क्या ls के साथ कुछ ऐसा ही करने का एक तरीका है?

जवाबों:


42

मुझे लगता है कि पूरा उत्तर उपरोक्त के संयोजन से अधिक है।

-X (later --sort=extension)लिनक्स में कम से कम FC3 के बाद से समर्थित है और विस्तार के आधार पर छाँटेगा। --group-directories-firstहाल ही में जोड़ा गया था (शायद FC8 के आसपास?)। हालाँकि, दोनों का संयोजन काम नहीं करता है (कम से कम FC8 पर)।

प्राथमिक मुद्दा एकवचन प्राथमिक सॉर्ट कुंजी के उपयोग के साथ लगता है। इसमें कुछ अंतर्दृष्टि के लिए मेलिंग सूची चर्चा देखें ।


5
मैं जानता हूँ कि इस पोस्ट के बजाय पुरानी है, लेकिन जैसे गूगल से यहाँ आने (जैसे मैंने किया था) दूसरों के लिए: के संयोजन --sort=extensionऔर --group-directories-first(या केवल --group-directories) Ubuntu 12.10 पर मेरे लिए ठीक काम करता है। अपने मशीन पर एक शॉट लायक भी! =)
टॉमस असचन

हां, किसी भी चीज़ के -X / --sort=extensionसाथ संयोजन करने में कोई समस्या नहीं है --group-directories-firstऔर मैंने आधुनिक लिनक्स डिस्ट्रोस पर कोशिश की है। ओपी फेडोरा कोर 8 (2007 जारी) का जिक्र कर रहा है, इसलिए संभावना है कि ऐसी कोई भी समस्या दूर के अतीत में हो।
मैट

23

लिनक्स पर,

$ ls --group-directories-first

( man lsआपका दोस्त है!)


1
rtfm कमेंट के SPITE में upvoted
श्रीधर सरनोबत

gls --group-directories-firstयदि आप GNU Core utilsहोमब्रे पर स्थापित करते हैं तो मैक पर
क्रै


13

बैश पर, यह काम की तरह होगा:

$ ls | rev | sort | rev

से man rev:

 The rev utility copies the specified files to the standard output,
 reversing the order of characters in every line.  If no files are speci-
 fied, the standard input is read.

इसलिए 1. ls अपना आउटपुट देता है, किसी भी झंडे के साथ जो आप चाहते हैं। 2. प्रत्येक पंक्ति 3 उलट है। फिर वे 4 क्रमबद्ध हैं।

  1. इस तरह:
  2. प्रत्येक पंक्ति उलट है
  3. फिर वे छंटे
  4. और फिर से उलट
  5. ls अपना आउटपुट देता है, किसी भी झंडे के साथ जो आप चाहते हैं

या, बिंदु से अधिक, नीचे के रूप में। वे अंतिम वर्ण द्वारा क्रमबद्ध किए जाते हैं, फिर अगले-से-अंतिम, आदि .rtf फ़ाइलें, उदाहरण के लिए, .save फ़ाइल के बाद और बिना एक्सटेंशन वाली एक अन्य फ़ाइल के साथ सूचीबद्ध होती हैं, जिसका नाम 'e' में समाप्त होता है। फिर .png फ़ाइलें, और इसी तरह से आएँ। यह ls -l के साथ भी काम करेगा, क्योंकि विस्तार आम तौर पर लाइन पर आखिरी चीज है (अपवाद यदि आपके पास "tmp @ -> / home / jones / tmp" जैसी लाइनें हैं, जहां लिंक उनके लक्ष्य द्वारा पीछा किया जाता है)।

$ ls | रेव | तरह | रेव
 cslu1
 ls.mp2
 ls.mp3
 ls.mp4
 trees_110214-15
 PAT
 CSLU
 प्रॉक्सी Form.doc
 finannbyid
 toannbyid
 101209ssi.txt.save
 to_annotate_size
 Matas समय-दर-सप्ताह integration2.rtf
 cyp3.rtf
 डेटा-निर्देशिका-scan.perl.doc.rtf
 जिस कारण से-R21-numid.rtf
 platypus.rtf
 स्क्रीन शॉट 2011-01-21 को 2.17.50 PM.png पर
 emacs print help.png
 लॉग
 new_month_log
 विशेष
 गूगल-ngram-critique.html
 perl_path.html
 nl
 DWE_BEN_89808.2.ann
 foo
 dofoo
 100811_from_iMac_Documents_in_dock.zip
 to-palikir.zip
 tmp
 फ़ाइल-सफाई
 बार
 डेटा-स्कैन-डॉक्स
 सीएमपी-मिलीग्राम-एन-numids
 finished_numids
 to_annotate_numids
 manls.ps
 Mike_address_ticket
 cyp2.out
 cyp3.out
 का पता लगाने-cyp.out
 manls.out
 DWE_BEN_89808.2.text
 tag2.txt
 l2.txt
 du-ज-d3.txt
 finished_ann_numids_110407_1714.txt
 finished_all_numids_110407_1718.txt
 डेटा-निर्देशिका-scan.perl.doc.txt
 जिस कारण से-R21-numid.txt
 finannid.txt
 toannid.txt
 B9-कार्यक्षेत्र-anndiff.txt
 tag.txt
 duh.txt
 कर-mail.txt
 safextn.txt
 mg3longhdr.txt
 finished_numids.txt
 41,692-langnames.txt
 TimeAnnotationGuidelines.txt
 41langs.txt
 thing4-homedir-links.txt
 bnlinks.txt
 grants.txt
 माता-फ़ाइल-reports.txt
 logx.txt
 logx
 B9-कार्यक्षेत्र-anndiff.txt ~
 bnlinks.txt ~ 

1
हालांकि, पहले निर्देशिका को सूचीबद्ध नहीं करेंगे।
कार्ल

अगर आपls -F
ग्लेन जैकमैन

प्रयास के लिए +1 ...
varun

@glennjackman बेहतर है। उत्तर में होना चाहिए।
आवाज

यह अच्छा होगा (विशेषकर के साथ -F) अगर इसे पाइपिंग के माध्यम से revऔर sortरंग ( -G) को पट्टी नहीं किया ।
आवाजें

3

यदि आप लिनक्स पर नहीं हैं,

ls -l |sort -d -k 1.1,1.1r -k 9 |awk '{print $9}'

पहले निर्देशिकाओं को क्रमबद्ध करना चाहिए (मुझे पता है कि क्या मैं गलत हूं)। विस्तार से क्रमबद्ध नहीं है, हालांकि: यदि आप ऐसा करना चाहते हैं, तो आपको अजीब कथन को बहुत व्यस्त बनाना होगा ...


भी यह नाम रिक्त स्थान युक्त के साथ काम करने के लिए, मैं शायद awk कुछ के साथ की तरह जगह लेंगे sed -E -e 's/([^ ]+[ ]+){8}//'पहले 8 क्षेत्रों बाहर पट्टी के बजाय 9 मुद्रण


वास्तव में, मुझे पूरा यकीन है कि यह लिनक्स पर भी काम करेगा, लेकिन जैसा कि दूसरों ने कहा है कि आपके पास कुछ अंतर्निहित समर्थन है।
Zac थॉम्पसन

1
एक मैक पर काम करता है। ध्यान दें कि यदि आपने इसे CLICOLORचालू किया है, तो रंग को हटा दिया जाएगा।
पलक

1
रिक्त स्थान के साथ फ़ाइल नाम के लिए गलत परिणाम देगा।
ग्लेन जैकमैन 14

@ ठीक है, आप सही हैं ... अगर यह एक चिंता थी, तो शायद मैं जाग को कुछ के साथ बदल दूंगा जैसे sed -E -e 's/([^ ]+[ ]+){8}//'कि 9 वें प्रिंट करने के बजाय पहले 8 क्षेत्रों को बाहर निकालना
Zac Thompson

ls -l |sort -d -k 1.1,1.1r -k 9 | cut -c 50-
nohillside

2

यदि आप लिनक्स पर चल रहे हैं, तो GNU विकल्प lsका समर्थन करता --sortहै: -

ls --sort=extension

जो मांगा नहीं गया था।
श्रीधर सरनोबत

0

एक अच्छा तरीका पहले फ़ोल्डरों को अलग कर रहा है , फिर सॉर्टिंग और एक्सटेंशन द्वारा एक्सटेंशन की गई फ़ाइलों को अलग करता है :

ls -p | grep /;ls -p | grep -v / | rev | sort | rev

-1

मैंने अपने .bashrc (linux) लाइन को जोड़ा

alias lx = "ls -X"

इस तरह मैं सिर्फ lx टाइप करता हूं और इसे एक्सटेंशन के द्वारा क्रमबद्ध करता हूं।


तो सवाल का जवाब उपयोग है ls -X:)
एंड्रयू

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