it-swarm.asia

Ls dosya uzantısına ve daha sonra isme göre nasıl sıralanır?

Varsayılan olarak, ls komutu sadece dosya adına göre sıralar, fakat dizinlerin diğer dosya türlerinden önce görünmesini istiyorum. Windows Gezgini'nin tür sütununa göre sıralanma şekli gibi dosyaların uzantıya göre sıralanmasını bile isteyebilirim. Ls ile benzer bir şey yapmanın bir yolu var mı?

41
allyourcode

Bence cevabın tamamı yukarıdakilerin bir birleşimidir.

-X (later --sort=extension), Linux'ta en azından FC3'ten beri desteklenmektedir ve uzantıya göre sıralayacaktır. --group-directories-first daha yakın bir zamanda eklendi (belki FC8? civarında). Ancak, ikisini birleştirmek işe yaramaz gibi görünüyor (en azından FC8'de).

Birincil mesele, tekil birincil sıralama tuşlarının kullanılması ile görünüyor. Buna bir bakış için bu posta listesi tartışması 'ya bakın.

39
CS

Linux'ta

$ ls --group-directories-first

(man ls senin arkadaşın!)

22
Ned Deily

-X, aradığınız seçenektir:

ls -lX
13
Carl Manaster

Bash, bu işe yarayacak:

$ ls | rev | sort | rev

man rev adresinden:

 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.

Yani 1. ls çıktısını verir, istediğin bayraklarla 2. her satır tersine çevrilir 3. sonra sıralanırlar 4. tekrar sıralanırlar 5. bunun gibi:

  1. bunun gibi:
  2. her satır tersine çevrilir
  3. o zaman sıralanırlar
  4. ve tekrar tersine döndü
  5. ls, istediğiniz bayrakla birlikte çıktılarını verir

Veya, aşağıdaki noktaya daha fazla. Son karaktere, sonra sonuncuya vb. Göre sıralanırlar. Örneğin tüm .rtf dosyaları, bir .save dosyasından ve adı 'e' ile biten bir uzantısı olmayan başka bir dosyadan sonra birlikte listelenir. Sonra gelin. Png dosyaları vb. Bu, ls -l ile de çalışacaktır, çünkü uzantı normalde satırdaki son şeydir ("tmp @ ->/home/jones/tmp" gibi satırlara sahipseniz, bağlantıların hedeflerinin takip ettiği istisnalar).

 $ 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 -by-week-tümleştirme2.rtf 
 cyp3.rtf 
 veri-tarama-tarama.Perl.doc.rtf 
 whence-r21-numid.rtf 
 platypus .rtf 
 Screen shot 2011-01-21 at 2.17.50 PM.png 
 emacs print help.png 
 giriş 
 new_month_log 
 özel 
 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 
 Dosya temizleme 
 Bar 
 Data-scan-docs 
 cmp-mg-ann-numids 
 bitmiş_sayılar 
 to_annotate_numids 
 manls.ps 
 Mike_address_ticket 
 cyp2.out 
 cyp3.out 
 locate-cyp.out 
 manls.out 
 DWE_BEN_89808.2.text [.___ _.] tag2.txt 
 l2.txt 
 du-h-d3.txt 
 bitmiş_ann_numids_110407_1714.txt 
 bitmiş_ay_sayısı_110407_1718.txt 
 -scan.Perl.doc.txt 
 whence-r21-numid.txt 
 finannid.txt 
 toannid.txt 
 b9-workspace-anndiff.txt 
 tag.txt 
 duh.txt 
 do-mail.txt 
 safextn.txt 
 mg3longhdr.txt 
 finish_numids.txt 
 41692-langnames.txt 
 TimeAnnotationGuidelines.txt 
 41langs.txt 
 Thing4-homedir-links.txt 
 Bnlinks.txt 
 Hibeler .txt 
 mata dosyası-raporları.txt 
 logx.txt 
 logx 
 b9-workspace-anndiff.txt ~ 
 bnlinks.txt ~ 
11
M. Mandel

Eğer Linux’ta değilseniz,

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

önce dizinleri sıralamalıyım (yanılıyorsam bana haber ver). Yine de, uzantıya göre sıralamıyor: Bunu yapmak istiyorsanız, awk ifadesini çok daha yoğun hale getirmek zorundasınız ...


Ayrıca boşluk içeren isimlerle çalışmasını sağlamak için, muhtemelen 9'unu yazdırmak yerine ilk 8 alanı çıkarmak için awk'yi sed -E -e 's/([^ ]+[ ]+){8}//' gibi bir şeyle değiştirirdim.

3
Zac Thompson

Eğer Linux üzerinde çalışıyorsanız, GNU ls--sort seçeneğini destekler: -

ls --sort=extension
2
DaveR

İyi bir yaklaşım, önce klasörler, ardından zantılara göre sıralanan dosyalar, SIRALAMA ve TERSİNE göre ayırmaktır:

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