Unix'in 'ls' ismine göre sırala


127

Bir sıralamak Can ls adıyla listeleme?


10
Herhangi bir argüman olmadan isme göre sıralama yapmıyorsa, ls'nin başka bir şeye takma ad olup olmadığını kontrol etmek isteyebilir veya var olan tüm diğer adları ortadan kaldıracak tam yolu kullanarak onu çağırabilirsiniz.
tvanfosson

gnu-coreutils ls varsayılan olarak sıralar. Hangi sistemi kullanıyorsunuz (diğerlerinin de sorduğu gibi)
Nick Fortescue

Türe göre değil ada göre sıralamayı istediğinizden emin misiniz (örn. Önce dizin, sonra dosyalar) ??
Curtis

Büyük harfler küçük harflerden önce gelir, dolayısıyla Z dosyası a dosyasından önce gelir ... bunu nasıl düzeltebilirim?
ArtOfWarfare

man sayfasında 'ayrı ayrı ve sözlük sırasına göre sıralandı' yazıyor. Dosyalar ilk karaktere göre sıralanır: sayısal [0..9] ve BÜYÜK karakterler [A..Z] ve lowe karakterler [a..z]
Gürol Canbek

Yanıtlar:


131

Ls, varsayılan olarak ada göre sıralar. Ne görüyorsun?

man ls devletler:

List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.:


ls-c1belirtilmezse sıralamaz : bunu yapmanın bir yolu var mı? ( --sort=nameişe yaramıyor gibi görünüyor)
dhc

1
Bu doğru değil. ile ls -la, görüyorum:, .bashrc - can - .config - Downloads - .local - tmpsıralama adı şöyle olacaktır:.bashrc - .config - .local - Downloads - can - tmp
12431234123412341234123

1
benimki 100.jpg'nin 10.jpg'den önce geldiğini söylüyor. "0" 'dan önce gelirse mantıklı. " ancak yine de sezgisel değil
chiliNUT

"B" den önce "M" görüyorum. Şaşkın. Bekle, büyük harf kullanımı önemli mi?
Daniel Springer

106

Basit bir şey için, ls'yi sort ile birleştirebilirsiniz . Dosya adlarının bir listesi için:
ls -1 | çeşit

Bunları ters sırada sıralamak için:
ls -1 | sırala -r


3
Dosyaları şu şekilde sıralamanın bir yolu var mı: ls | sort -n 1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; 2.10.15'ten 2.10.2'den önce görebileceğiniz gibi .
BBK

Bir Pidion cihazında bazı android geliştirmeleri yapıyorum ve ls otomatik olarak sıralamıyor, bu yüzden bu çok yardımcı oldu! Tek sorun, yumuşak bağlantıları sıralıyormuş gibi görünmesi, ancak bazı nedenlerden dolayı dosyaları sıralamaması
Mitch

Mac'te, bu ikinci komut olarak kısaltılabilecek gibi görünüyor ls -1r.
Ash Ryan Arnwine 01

4
@BBK sırala -V, sürüm numaralarına göre sıralar, böylece elde edersiniz .. 2.10.2; 2.10.15; .. adam sıralamasından .. --sort = WORD WORD'e göre sıralanacaktır: genel-sayısal -g, insan-sayısal -h, ay -M, sayısal -n, rastgele -R, sürüm -V
mosh

35

lsfrom varsayılan olarak yerel ayara duyarlı bir sıralama coreutilsgerçekleştirir ve bu nedenle bazı durumlarda şaşırtıcı sonuçlar üretebilir (örneğin, arasında ve içinde sıralama yapar ). ASCIIbetical sıralama istiyorsanız, şunu kullanın:%foobarquuxLANG=en_US

LANG=C ls

LANGSıralamayı etkilemek, bu yazı bana çok yardımcı oluyor!
yurenchen

Bu benim için de çalıştı. Bu konuda ayrıntılı misiniz? Neden farklı sıralanır?
Kostas

1
Bu doz çalışır, ancak çıktı ?bir terminal olduğunda her ascii olmayan karakter için çıktı (ls'den gelen kötü özellik, bir terminale çıktı verip vermediğini kontrol eder, borulama yaparken çalışır). Bunu "borulama" ile "düzeltebilir", C.UTF-8yerel ayarı (sisteminiz destekliyorsa) ve / veya -bbayrağı kullanabilirsiniz . Daha da iyisi, hiç kullanmayın ls, daha iyi kullanın ``
12431234123412341234123

Bu, benim için sorun olan dosya isimlerimden bazılarının tire (-) ve bazılarının da uzun tire (-) içermesi olduğunu keşfetmeme yardımcı oldu. lstirelerden önce kısa çizgileri sıralar.
Jamy Mahabier

17

* Nix araçlarının güzelliği, bunları birleştirebilmenizdir:

ls -l | sort -k9,9

Çıktısı ls -lşöyle görünecek

-rw-rw-r-- 1 luckydonald luckydonald  532 Feb 21  2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt

Böylece , sütunu dosya adları olarak 9,9sütuna 9kadar sıralayın 9. Bu durumda aynı sütun olan nerede duracağınızı belirtmelisiniz. Sütunlar ile başlar 1.

Ayrıca, büyük / küçük harfleri yok saymak istiyorsanız --ignore-case, sıralama komutuna ekleyin .


1
Ne anlama -k9,9geliyor?
luckydonald

Bulundu, sütunu 9aynı sütuna kadar sıralamak anlamına gelir 9. Normal bir lsçıktı şuna benzer: bu drwx------ 8 999 user 4.0K Feb 5 2017 file.txtnedenle sütun 9 dosya isimleridir. Vakayı yok saymak istiyorsanız, sırayla kullanın --ignore-case.
luckydonald

8

DİKKAT: "a", "Z" SONRASI:

$ touch A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt


3
Bu her zaman doğru değildir. Bunu doğru yapmayan koşulları tam olarak bilmiyorum, ancak Ubuntu 12.04 çalıştıran makinemde ls'nin çıktısı alfabetik olarak sıralanır (büyük / küçük harf dikkate alınmaz).
Patrick James McDougle

İyi yakalama! ASCII koduna dayalı onu sipariş gibi .. Büyük harf alfabe küçük harfle izlemektedir görünüyor ..
Kent Pawar

1
MacOS'umun önce sayıları, ardından büyük harfleri, ardından alt çizgi ve ardından küçük harfleri sıraladığını fark ettim. Büyük / küçük harfe duyarlı olmamaları komik. Öte yandan, Debian'ım büyük / küçük harfe duyarlıdır, ancak bir bağ olmadığı sürece harfleri duyarsız bir şekilde sıralar, sonra küçük harf kazanır! Örnek: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82

Ben de bir MAC kullanıyorum. A, Z, a, z tiplerinde sıralama görmek beni hayal kırıklığına uğrattı. Buradayım çünkü A, a, Z, a olmasını tercih ederim. bahşişiniz için teşekkürler. normalçözümleri burada deneyecek .
nyxee

8

Yalnızca sayısal bir dizeyle farklı olan dosyalar, önünde bir ayırıcı olması koşuluyla bu numaraya göre sıralanabilir.

Bu durumda, aşağıdaki sözdizimi kullanılabilir:

ls -x1 file | sort -t'<char>' -n -k2

Misal:

ls -1 TRA*log | sort -t'_' -n -k2

TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log

4

Man sayfasından (bash ls için):

-CftuSUX veya --sort'tan hiçbiri yoksa girişleri alfabetik olarak sıralayın.


3
"Bash ls" diye bir şey yok. "Hangisi"
Norbert Hartl

@Norbert: Haklısınız, ama Bash'in yerleşik bir ls'si which lsolsa bile başarılı olursunuz . Bunun yerine, builtin lsbash'ta yapın ve bir hata alın.
Pianosaurus

4
@Norbert: whichher zaman bir yol döndürür. type lsKabuğun ne düşündüğünü belirlemek için kullanın ls(yerleşik, işlev, çalıştırılabilir).
ephemient

3

Yardımcı lsprogram, POSIX.1şunları belirten IEEE Std 1003.1-2001 ( ) ile uyumlu olmalıdır :

22027: dizin ve dizin dışı işlenenleri, geçerli yerel ayardaki harmanlama sırasına göre ayrı ayrı sıralayacaktır.

26027: Varsayılan olarak, format belirtilmemiştir, ancak çıktı sembol adına göre alfabetik olarak sıralanacaktır :

  • −A belirtilmişse kitaplık veya nesne adı
  • Sembol adı
  • Sembol türü
  • Sembolün değeri
  • Varsa, sembolle ilişkili boyut


2

ls -X, ls'yi daha kullanışlı bir varsayılana takma adınız olması durumunda bu amaç için çalışır.


0
In Debian Jessie, this works nice:

ls -lah --group-directories-first

# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha

# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.