Önce “ls” nin dotfiles göstermesini nasıl sağlayabilirim?


46

Yol boyunca bir yerlerde ls komutumu mahvettim ve şimdi çalışırken bu siparişi alıyorum

$ ls -AhHl --color=auto
-rwxr-xr-x 1 clang clang  640 Mar  1 02:46 apple-touch-icon-precomposed.png
-rwxr-xr-x 1 clang clang  784 Jul 12 02:54 crossdomain.xml
-rwxr-xr-x 1 clang clang 1.2K Mar  1 02:46 favicon.ico
drwxr-xr-x 8 clang clang 4.0K Jul 12 23:50 .git
-rw-r--r-- 1 clang clang   17 Feb 29 19:48 .gitignore
-rwxr-xr-x 1 clang clang 1.4K Jul 12 02:54 humans.txt

Bunu nokta dosyalarını görmezden getirip, ilk harfe göre sipariş etmesini sağlayan ne yaptım?

Çıktı locale:

$ locale
LANG=
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Yanıtlar:


47

Eklemeyi dene

export LC_COLLATE="C"

nokta dosyalarınızda veya LC_ALLatamayı değiştirerek:

export LC_ALL="C"

Bu kontroller karakter seviyesi çalışmalarına sıralama yolu - varsayılan satır içi sıralama dotfiles olacaktır ederken, bu yapacaktır sortİlk liste dotfiles.

Ancak, bunun asıl yerel ayarlarınız için tüm yerel ayar yardımcı programlarındaki desteği temel olarak durduracağını unutmayın.


Daha da ileri gitmek için, GNU Coreutils kılavuzundan alıntı (benimki vurgu):

Olmayan bir POSIX yerel kullanırsanız (örneğin ayarlayarak LC_ALLiçin en_US), sonra sıralama farklı sıralanır çıktı üretebilir Eğer alışık olduğunuz daha.

Bu durumda, LC_ALLortam değişkenini olarak ayarlayın C. Ayarın yalnızca LC_COLLATEiki sorunu olduğunu unutmayın . İlk olarak, LC_ALLayarlanmışsa etkisizdir . İkinci olarak, bu tanımsız davranış durumunda sahip LC_CTYPE(ya da LANG, eğer, LC_CTYPEayarlanmadan) uyumlu bir değere ayarlanır. Örneğin, sen tanımsız davranış almak LC_CTYPEolduğunu ja_JP.PCKancak LC_COLLATEolduğunu en_US.UTF-8.


2
LC_ALL = "C" ayarını yaptı! Hızlı tepki için teşekkürler
clang1234

7
LC_ALL = "C" ayarı lsyabancı dilde (örneğin Japonca) unicode dosya isimleri????????
ohho

export LC_ALL="C"Nokta dosyalarınıza ekleyerek , asıl yerel ayarınız için tüm yerel ayarları çalıştıran yardımcı programları desteklemenizi etkili bir şekilde kaybedeceğinizi unutmayın. İken baskı @ohho noktaları dışarı ile telafi edilebileceğini soruna Faroul cevabı , size tanıtacağız sıralama sorunları: bayt değeri yalnızca, o sıralama ile sonuçlanan (a) beklenmedik bir şekilde gerçekleşmesi olacak sıralama durumda duyarlı (b) değişmez yerler ve aksanlı karakterler. tüm aksanlı olmayanlardan sonra .
mklement0

35

Gerçek bir ihtiyaç duymadan sistem genelinde yapılan değişikliklerden kaçınmak için, yalnızca lstakma adı aşağıdakilere ekleyerek geçerli kullanıcı için çalışma şeklini değiştirebilirsiniz .bashrc:

alias ll='LC_COLLATE=C ls -alF'

Bu, önce nokta dosyalarını sıralar, kiril gibi "nadir" karakter kümelerini düzgün bir şekilde işlemeye (göster ve sırala) izin verir. Sıralamanın büyük / küçük harfe duyarlı olacağı tek suçlu.

Kaynak: http://ubuntuforums.org/showthread.php?t=816753


3
Bu, şu ana kadarki en iyi cevaptır
Engineer Dollery

Güzel. Sistem genelinde yapılandırmayı değiştirmekten çok daha iyidir (bu, bazı python modüllerinde sorunlara neden olabilir).
Gui Ambros

1
Bu en yararlı cevaptı. Ek olarak, LC_ALLlistenin en üstündeki nokta dosyalarını sıralama / kaldırma ile uyumsuz bir şeye ayarlanmış bir ortamda ls, alias ll='LC_ALL=C ls -alF'bunun yerine kullanın, çünkü LC_COLLATEgeçersiz kılmaz LC_ALL.
mat

8

Ayar

LC_ALL="C.UTF-8"

benim için iyi çalışıyor - umlauts ve "ls -la" ilk önce nokta dosyalarını listeler.


3
nokta dosyaları ilk önce listelenir, ancak şimdi büyük harfle başlayan dosya adları küçük harfle başlayanlardan önce listelenir.
Chnossos

1
+1 kabul edilen yanıttan daha yakına gelmek için, ancak sınırlamaları özetlemek için: sıralama büyük / küçük harfe duyarlı olacak ve yabancı karakterler - şimdi nedeniyle doğru yazdırılırken - doğru UTF-8şekilde sıralanmayacak .
mklement0

3
C.UTF-8geçersiz bir yerel ayar olduğundan, yerel ayar geri döner C. UTF-8 desteğini hala kaybedersiniz. Aslında, LC_ALL=Cçoğu program çoğu çok baytlık karakterleri doğru gösterdiğinden , ancak LC_ALL=something_invalidbazı programlarda ( l'ler gibi) olmadığı için daha da kötüdür .
Martin Tournoij

@ MartinTournoij, ancak Stéphane Chazelas GNU sistemleri ( aksi halde genel olarak Debian ve Linux) hakkında başka şeyler söylüyorsa , hangisi doğrudur?
muru

@muru emin değilim, sanırım Stéphane'e sormak zorunda kalacaksın? Tek bildiğim bunun yanlış olduğu localegörünüyor LC_ALL=C.UTF-8: gist.github.com/Carpetsmoker/ef09b3734b29372939f97107413d7733 - bu Arch Linux'ta.
Martin Tournoij

3

Ls (1) manpage listesi:

Metin içinde -v doğal tür (sürüm) sayılar

Bu, dönemlerin nasıl sıralanacağını değiştirir ve ilk önce grup nokta dosyalarını yapar. Sahibim:

alias ls='ls -vAF'
alias ll='ls -l'

benim ~ / .bashrc içinde.


1

Duvardan bir fikir

Yasal Uyarı: Bu, çoğunuz için overkill olacak. Fakat bunu 1995'ten beri yapıyorum ve dünyamı tam olarak istediğim gibi yapma becerisine sahibim. Öyleyse neden olmasın?

lsÖzellikle farklı sıralama yöntemlerini kullanmayı seviyorum -rt(ki bu rters değiştirilmiş time ile sıralanır ). Bu yüzden çılgınca bir şeyler denemeye ve sıralamalarımı yapmak için awk kullanmaya karar verdim.

# save as ~/.ls.awk
# inpsired by http://superuser.com/questions/448291/how-can-i-make-ls-show-dotfiles-first

{
    if($1 == "total"){
        print $0
        next
    }
    # may need to adjust $9 to match your name column
    if(match($9, /^(\033\[[0-9]*m)*\./)) # optionally look past xterm highlighting like: ^[[34m
        df[++dd] = $0
    else
        nf[++nn] = $0
}
END{
    while (++d in df)
        print df[d]
    while (++n in nf)
        print nf[n]
}

Şimdi bir bash takma adı tanımlamak yerine, bash işlevini tanımlarım (takma adlar yalnızca sonuna argüman ekleyebilir, ancak işlevler bunları herhangi bir yerde kullanabilir)

ll(){ CLICOLOR_FORCE=1 ls -lhA $* | awk -f ~/.ls.awk; }

Sonuçları görmek için

Bazı örnek dosyalar oluşturalım:

for n in 4 .4 3 .3 2 .2 1 .1; do touch $n; sleep 1; done

Düz ls kullanarak

$ ls -lA
total 8
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
$ ls -lArt

total 8
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1

Awk ile filtreleyen fonksiyonumu kullanma

$ ll
total 8
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4

$ ll -rt
total 8
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1

Bunun benim uygulanmasını burada görebilirsiniz https://github.com/RichardBronosky/dotfiles/commit/6170c0a9

Bu konuda en önemli şey, lsçıktınızı değiştirmek için bir çerçeve olmasıdır . Bu awk filtresiyle istediğiniz her şeyi yapabilirsiniz. Dizinler, sonra nokta dosyaları, sonra her şey olmasını isteyebilirsiniz. Xterm renklerinizi nasıl kullanacağınızı öğrendikten sonra, çok zor değil. Bu tamamen sana kalmış.


-1

Bunu .bashrc veya / etc / bashrc dosyanızda deneyebilirsiniz:

LS_OPTIONS='--color=tty -A -F -X -B -h -v -b -T 0 --group-directories-first';
export LS_OPTIONS;
alias ls='/bin/ls $LS_OPTIONS';

Bu, bir seçenek olarak "--group-dizinleri ilk" alan bir parça daha yeni bir sürüm çalıştırdığınızı varsayar. Açıkçası beğeninize LS seçeneklerini ayarlayabilirsiniz.


--group-directories-first“Önce dotfiles göster” ile ne ilgisi var?
G-Man
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.