it-swarm.asia

كيفية جعل ليرة سورية فرز حسب امتداد الملف ثم الاسم؟

بشكل افتراضي ، يتم فرز الأمر ls فقط حسب اسم الملف ، لكنني أريد أن تظهر الأدلة قبل أنواع الملفات الأخرى. قد أرغب حتى في فرز الملفات حسب الامتداد ، مثل الطريقة التي يتم بها فرز Windows Explorer حسب عمود الكتابة. هل هناك طريقة لفعل شيء مماثل مع ls؟

41
allyourcode

أعتقد أن الجواب الكامل هو أكثر من مزيج من أعلاه.

-X (later --sort=extension) مدعوم في Linux منذ FC3 على الأقل وسيتم الفرز بناءً على الامتداد. تمت إضافة --group-directories-first مؤخرًا (ربما حوالي FC8؟). ومع ذلك ، فإن الجمع بين الاثنين لا يعمل (على الأقل في FC8).

يبدو أن المشكلة الأساسية تتمثل في استخدام مفاتيح الفرز الأساسية الفردية. راجع هذا مناقشة القائمة البريدية للحصول على نظرة ثاقبة.

39
CS

على لينكس ،

$ ls --group-directories-first

(man ls هو صديقك!)

22
Ned Deily

-X هو الخيار الذي تبحث عنه:

ls -lX
13
Carl Manaster

على باش ، وهذا نوع من العمل:

$ 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. وعكس مرة أخرى 5. مثل هذا:

  1. مثله:
  2. يتم عكس كل سطر
  3. ثم يتم فرزهم
  4. وعكس مرة أخرى لذلك
  5. ليرة لبنانية يعطي ناتجها ، مع أي أعلام تريد

أو ، أكثر من هذه النقطة ، على النحو التالي. يتم فرزها حسب الحرف الأخير ، ثم التالي إلى الأخير ، وما إلى ذلك. يتم سرد جميع ملفات .rtf ، على سبيل المثال ، معًا ، بعد ملف .save وملف آخر بدون امتداد ينتهي اسمه في "e". ثم تأتي. بابوا نيو غينيا الملفات ، وهلم جرا. سيعمل هذا أيضًا مع ls -l ، لأن الامتداد هو آخر شيء على الخط عادة (باستثناء إذا كان لديك خطوط مثل "tmp @ ->/home/jones/tmp" ، حيث تتبع الارتباطات أهدافها).

 $ ls | rev | sort | rev 
 cslu1 
 ls.mp2 
 ls.mp3 
 ls.mp4 
 trees_110214-15 
 PAT 
 CSLU 
 وكيل Form.doc 
 finannbyid 
 toannbyid 
 101209ssi.txt.save 
 to_annotate_size 
 Matas-time -by-week-integration2.rtf 
 cyp3.rtf 
 data-dir-scan.Perl.doc.rtf 
 whence-r21-numid.rtf 
 platypus .rtf 
 Screen shot 2011-01-21 في 2.17.50 PM.png 
 emac print help.png 
 log 
 new_month_log 
 special 
 Google-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 
 tmp 
 bar-cleaning-docs - 
 ] cmp-mg-ann-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-h-d3.txt 
 finished_ann_numids_110407_1714.txt 
 finished_all_numids_110407_1718.txt 
 data-dir -scan.Perl.doc.txt 
 حيث r21-numid.txt 
 finannid.txt 
 toannid.txt 
 b9-workspace-anndiff.txt 
 tag.txt 
 duh.txt 
 do-mail.txt 
 safextn.txt 
 mg3longhdr.txt 
 finished_numids.txt 
 41692-langnames.txt 
 منح TimeAnnotationGuidelines.txt 
 41langs.txt 
 thing4-homedir-links.txt 
 bnlinks.txt 
 .txt 
 mata-file-reports.txt 
 logx.txt 
 logx 
 b9-workspace-anndiff.txt ~ 
 bnlinks.txt ~ 
11
M. Mandel

إذا كنت لست على لينكس ،

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

يجب فرز الدلائل أولاً (اسمحوا لي أن أعرف إذا كنت مخطئًا). لا يتم الفرز حسب الامتداد ، على الرغم من ذلك: عليك أن تجعل عبارة awk أكثر انشغالًا إذا كنت ترغب في القيام بذلك ...


لجعلها تعمل أيضًا مع أسماء تحتوي على مسافات ، من المحتمل أن أستبدل awk بشيء مثل sed -E -e 's/([^ ]+[ ]+){8}//' لتجريد الحقول الثمانية الأولى بدلاً من طباعة الرقم التاسع.

3
Zac Thompson

إذا كنت تعمل على نظام Linux ، فإن GNU ls تدعم خيار --sort: -

ls --sort=extension
2
DaveR

أسلوب جيد هو فصل المجلدات في البداية ، ثم فرز الملفات حسب الامتدادات ، عن طريق الفرز والعكس:

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