it-swarm.asia

Bagaimana membuat ls urutkan berdasarkan ekstensi file dan kemudian beri nama?

Secara default perintah ls mengurutkan hanya dengan nama file, tetapi saya ingin direktori muncul sebelum jenis file lainnya. Saya bahkan mungkin ingin file diurutkan berdasarkan ekstensi, seperti cara Windows Explorer mengurutkan berdasarkan kolom jenis. Apakah ada cara untuk melakukan sesuatu yang mirip dengan ls?

41
allyourcode

Saya pikir jawaban yang lengkap lebih merupakan kombinasi dari yang di atas.

-X (later --sort=extension) telah didukung di Linux sejak setidaknya FC3 dan akan disortir berdasarkan ekstensi. --group-directories-first telah ditambahkan baru-baru ini (mungkin sekitar FC8?). Namun, menggabungkan keduanya sepertinya tidak berhasil (setidaknya pada FC8).

Masalah utama tampaknya dengan penggunaan kunci sorting primer tunggal. Lihat ini diskusi milis untuk beberapa wawasan tentangnya.

39
CS

Di Linux,

$ ls --group-directories-first

(man ls adalah teman Anda!)

22
Ned Deily

-X adalah opsi yang Anda cari:

ls -lX
13
Carl Manaster

Pada bash, ini akan berfungsi:

$ ls | rev | sort | rev

Dari 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.

Jadi 1. ls memberikan outputnya, dengan flag apa pun yang Anda inginkan 2. setiap baris dibalik 3. lalu disortir 4. dan dibalik 5. seperti ini:

  1. seperti ini:
  2. setiap baris dibalik
  3. kemudian mereka disortir
  4. dan dibalik lagi Jadi
  5. ls memberikan outputnya, dengan semua flag yang Anda inginkan

Atau, lebih tepatnya, seperti di bawah ini. Mereka diurutkan berdasarkan karakter terakhir, lalu ke yang terakhir, dll. Semua file .rtf, misalnya, didaftar bersama, setelah file .save dan file lain tanpa ekstensi yang namanya berakhir dengan 'e'. Kemudian datang file .png, dan sebagainya. Ini juga akan bekerja dengan ls-l, karena ekstensi biasanya adalah hal terakhir pada baris (pengecualian jika Anda memiliki baris seperti "tmp @ ->/home/jones/tmp", di mana tautan diikuti oleh target mereka).

 $ ls | rev | sort | rev 
 cslu1 
 ls.mp2 
 ls.mp3 
 ls.mp4 
 trees_110214-15 
 PAT 
 CSLU 
 Proxy Form.doc 
 Finannbyid 
 Toannbyid 
 101209ssi.txt.save 
 To_annotate_size 
 Matas-time -dengan-minggu-integrasi2.rtf 
 cyp3.rtf 
 data-dir-scan.Perl.doc.rtf 
 whence-r21-numid.rtf 
 platypus .rtf 
 Cuplikan layar 2011-01-21 pada 2.17.50 PM.png 
 emacs 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 
 Pembersihan file 
 Bar 
 Bar 
 Data-scan-docs 
 ] cmp-mg-ann-numids 
 finished_numids 
 to_annotate_numids 
 manls.ps 
 Mike_address_ticket 
 cyp2.out 
 cyp3.out 
 cari-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 
 dimana-r21-numid.txt 
 finannid.txt 
 toannid.txt 
 b9-workspace-anndiff.txt 
 tag.txt 
 duh.txt 
 do-mail.txt 
 safextn.txt 
 mg3longhdr.txt 
 selesai_numids.txt 
 41692-langnames.txt 
 TimeAnnotationGuidelines.txt 
 41langs.txt 
 Thing4-homedir-links.txt 
 Bnlinks.txt 
 Hibah .txt 
 mata-file-reports.txt 
 logx.txt 
 logx 
 b9-workspace-anndiff.txt ~ 
 bnlinks.txt ~ 
11
M. Mandel

Jika Anda tidak menggunakan linux,

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

harus mengurutkan direktori terlebih dahulu (beri tahu saya jika saya salah). Tidak mengurutkan berdasarkan ekstensi: Anda harus membuat pernyataan awk menjadi lebih sibuk jika Anda ingin melakukan itu ...


Untuk membuatnya berfungsi dengan nama yang berisi spasi, saya mungkin akan mengganti awk dengan sesuatu seperti sed -E -e 's/([^ ]+[ ]+){8}//' untuk menghapus 8 bidang pertama alih-alih mencetak bidang ke-9

3
Zac Thompson

Jika Anda menjalankan di Linux, GNU ls mendukung opsi --sort: -

ls --sort=extension
2
DaveR

Pendekatan yang baik adalah memisahkan folder pada awalnya, kemudian file diurutkan berdasarkan ekstensi, dengan MENYIMPAN dan MEMBACA keluar:

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