ls
Önce dizinleri sonra da dosyaları göstermek için bu komutu kullanmak istiyorum . Denedim:
ls -la | sort -k 1
Ama yanlış bir sipariş aldım.
ls -lh --group-directories-first
ls
Önce dizinleri sonra da dosyaları göstermek için bu komutu kullanmak istiyorum . Denedim:
ls -la | sort -k 1
Ama yanlış bir sipariş aldım.
ls -lh --group-directories-first
Yanıtlar:
Aşağıdaki komut ilk önce dizinleri, sıradan dosyaları ikinci ve üçüncü bağlantıları listeler.
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
Ayrıca, bu komut için tuş vuruşlarını korumak üzere bir takma ad oluşturmak çok mantıklı olacaktır .
Düzenle:
Önce dizinleri, sonra da ikinci bir dizin olmayan her şeyi istiyorsanız, şunu kullanın:
ls -la | grep "^d" && ls -la | grep -v "^d"
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total"
?
alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
ls -la|grep ^d;ls -la|grep -v ^d
(tırnak gerekli ve değiştirilmez &&
ile ;
). Başka bir seçenek bir değişken tanıtmak ve daha sonra değerlendirmektir: a="ls -la|grep ^d";eval $a;eval $a -v
. Çok fazla seçenek için belirtildiğinde tekrarlardan kaçınmak için yararlı olabilir ls
/ ' grep
. Bu ls -la --group-directories-first
seçenek de var , ancak en kısa imols -la|sort
Öyle yapıyorum * aşk * ve bu cevapların bazılarına giren yaratıcılığı görmeyi seviyorum ...
Benimki GNU Linux'ta neredeyse hiç de fantazi değil:
alias ls='ls --color -h --group-directories-first'
Linux CLI uygulamalarımda daha rahat olduğum için OSX'deki coreutils'i de güncelleme eğilimindeyim:
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
brew install bash
, o zaman çalışmalısınız! :)
Mac kullanıcıları için coreutils :
brew install coreutils
alias ls='ls --color -h --group-directories-first'
Sisteminizin homebrew hazır olduğunu varsayarsak :
gls
daha doğrusu. Sağ?
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
.
Bir rehber listesinde görmek istediğim bazı şeyler var ve şu ana kadarki cevapların hiçbiri aşağıdaki şartları yerine getirmiyor. Bir dizin listesi için gereksinimlerim:
./
ve hariç ../
), dosyaları ve bağlantıları içerir--group-directories-first
Windows için Git Bash'te çalışmayan gibi uygun seçeneklerÇok fazla hacklendikten sonra nihayet memnun olduğum tek bir gömlek (çok uzun bir çizgi de olsa ;-)) ile geldim. Bunu 'dir' adlı bir diğer adaya atadım:
ls -dlF --color * .* | head -n2 && ls -AlF | LC_ALL=C grep "^d" |
LC_ALL=C sort -k 9df && ls -AlF | LC_ALL=C grep "^[l-]" |
LC_ALL=C sort -k 9df && echo -e `find -maxdepth 1 -type d ! -name . |
wc -l` Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f |
wc -l` File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- |
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l` Link\(s\)
İşlerin daha kolay yönetilmesini sağlamak için, dizin listesinin her bir bölümünü kendi isteğime çıkarmak için ayrı komutlar verdim, sonra &&
operatörü kullanarak bunları birleştirdim .
ls -dlF --color * .* | head -n2
- ./
ve ayıklayın ../
. Bunları geçmek istemiyoruz, sort
çünkü zaten doğru sıradalar ve bunları sıralama ../
ilk sırada listelenmesine neden olabilir . -d
Seçenek "toplam" çizginin kurtulmak için; -F
Dizinler için sondaki eğik çizgiyi göstermeyi de eklemek isterim (düz bir işlem yaptığınızda "@" ile sembolik işaretleri de işaretler ls -F
).
ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df
- Dizinleri ayıklayın ve alfa / boşluk olmayan karakterleri ( d
seçenek) ve karakter büyüklüğünü ( f
seçenek) yok sayarak dosya adına göre (9. sütun) sıralayın . ls -A
Opsiyon dışlayan ./
ve ../
listeden zaten önceki adımda onları çıkarılan beri. Tümünü önekleme eğilimindeyim grep
ve yerel sıfırlama sort
komutları ile LC_ALL=C
(1) çıktı Unix kabukları arasında tutarlı olacak ve (2) bazen ağır UTF-8 karakterinin yüküne ayarlanmadığı için daha hızlı performans görebilirsiniz uğraşmak.
ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df
- Bu yukarıdaki adıma benzer, ancak bu sefer dosyaları ve sembolik bağlantıları sıralıyoruz.
find -maxdepth 1 -type d ! -name . | wc -l
- ./
ve hariç, dizin sayısını al ../
.
find -maxdepth 1 -type f | wc -l
- Dosya sayısını al.
find -maxdepth 1 -type l | wc -l
- Symlinks sayısını al.
du -hs | cut -f 1
- Tüm alt dizinlerin toplam boyutunu insan tarafından okunabilir biçimde çıkarın.
find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1
- Tüm dosyaların toplam boyutunu insan tarafından okunabilir biçimde çıkarın.
Yeni dir
takma adımızı çalışırken görelim !
ÖNCE:
$ ls -alF
total 22
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
SONRA:
$ dir
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
5 Dir(s) 2.8M 6 File(s) 31K 0 Link(s)
Küçük bir dezavantajı, renkli listelerinizin olmamasıdır; çünkü dosya adlarını çevreleyen renk kontrol karakterleri, sıralamayı çok güvenilmez hale getirir.
GÜNCELLEME
Yukarıdaki takma ad, derin bir dosya sisteminin kök dizininden çalıştırıldığında acı verici bir şekilde yavaştı, bu yüzden daha basit ancak çok daha fazla performans gösteren komut için güncelleme yaptım:
ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'
Örnek çıktı:
$ dir
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .aws/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .gem/
drwxr-xr-x 1 Tom 0 Mar 29 19:32 .ssh/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .zbstudio/
drwxr-xr-x 1 Tom 0 Jun 16 2016 temp/
drwxr-xr-x 1 Tom 0 Jul 13 2016 vimfiles/
-rw-r--r-- 2 Tom 365 Mar 30 10:37 .aliases
-rw-r--r-- 1 Tom 16028 Mar 30 12:12 .bash_history
-rw-r--r-- 2 Tom 2807 Mar 30 12:12 .bash_profile
-rw-r--r-- 2 Tom 2177 Mar 29 23:24 .functions
-rw-r--r-- 1 Tom 1091 Mar 30 10:34 .gitconfig
-rw-r--r-- 1 Tom 8907 Mar 29 14:45 _viminfo
-rw-r--r-- 1 Tom 2444 Jul 13 2016 _vimrc
33819 bytes
Windows için Git Bash'in yeni versiyonunu desteklediğinden --group-directories-first
, artık geri adım atmamız gerekmiyor sort
. Yeni takma ad önceki takma ad kadar bilgi göstermese de, performans kazanımları buna değer. Bir perk olarak, aynı zamanda renkler olsun!
Alfabetik sıraya göre tutmak istemenize bağlı olarak birkaç seçeneğiniz var.
Basitçe deneyebilirsin:
ls -al | sıralama -k1 -r
veya bu, aynı izinlere sahip dosyalar için alfabetik olarak sıralanmak için:
ls -al | sıralama -k1,1 -k9,9 -r
veya, onbir81’in söylediği gibi (ancak bu sürüm her şeyi listeler):
ls -la | grep "^ d" && ls -la | grep "^ -" && ls -al | grep -v "^ [d | -]"
ls- al|sort -k1 -r
. Eksik olan sadece -r
bayrak.
./
ve ../
bu sırada ilk iki satır olmayacak. Bunun dışında daha etkili bir çözüm olduğuna katılıyorum.
To delerious010 en cevap, sana eski stil sipariş istiyorsanız o eklersiniz:
LANG=C ls -la --group-directories-first
(veya "C" ye ayarlanmış LC_ALL veya LANGUAGE veya LC_COLLATE kullanın).
Bu benzer bir şey verecektir:
.
..
DIR
Dir
dir
.hidden
123
UC_FILE
Uc_file
lc_file
Yine de doğru hatırlıyorsam, gizli nokta dosyaları başlangıçta dizinlerden önce belirdi.
İşte bunu yapmak için bir işlev (bash veya zsh): Ve ... Bunun en iyi yol olduğunu söylemiyorum, ama şu anda kullandığım ve kullandığım yöntem:
işlev lss { # En üstte bulunan dizinleri içeren dizin listesini gösterir. komut ls --color = her zaman $ @ | egrep '^ d | total' komut ls --color = her zaman $ @ | egrep -v '^ d | total'; }
ls -l
dosya türüne göre filtrelemek için uzun liste formatını ( ) kullanmanız gerekir . Ayrıca, bu komut boşluklara (bash olarak) bölünür. Böyle bir alıntı yapmanız gerekir: "$@"
Bu yaklaşımı kullanmak istiyorsanız, şöyle bir şey yapabilirsiniz:function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
Diğer yol ...
find . -d 1 -type d | ls -la | sort -r
VEYA
ls -la | sort -r
VEYA
d=`find . -type d -d 1`;f=`find . -type f -d 1`; echo -e -DIRS- "\n$d\n" -FILES- "\n$f"
alias ls='ls -lhF --color'
list_sorted() {
ls $* | grep "^d";
ls $* | grep "^-";
ls $* | grep -v -E "^d|^-|^total"
}
alias ll=list_sorted
Buradaki cevaplarda ve yorumlarda verilen çözümlerin bir kombinasyonunu kullanıyorum.
ls
Her şeyden önce, bunun için varsayılan davranışın üzerine yazarım ls
:
-l
: Listeyi daima tek boyutlu, dikey liste olarak görüntüle-h
: Dosya boyutlarını insan tarafından okunabilir bir şekilde görüntüler (örn. 4096 yerine 4.0K)-F
: Dizinler için sondaki eğik çizgi gibi göstergelerialias ls='ls -lhF --color'
ll
Sonra, sıralama mantığını içeren bir fonksiyon yazarım. Her biri için ls
başlangıçta iletilen argümanları iletiyorum. Bu, takma adı kullanarak listelemek istediğimden farklı bir çalışma dizininden kullanmamı sağlıyor ls -a ~
.
Ayrıca, yapılan her çağrı ls
bir grep
komuta yönlendirilir. Burada sıralama gerçekleşir. ls -l | grep "^d"
örneğin sadece dizinleri listeler. İlk önce dizinlerin listelenmesi gerekiyorsa, bunun da işlevde ilk sırada olması gerekir. Sıradaki şey dosya.
Son olarak, ne bir dizin ne de bir dosya (ne de dizin içeriğinin toplam boyutunu gösteren çizgi) olan her şeyi gösteririm. Bu, genel müdürlük, düzenli dosya girişleri ve toplam girişin izlenmesi ve ardından -v
argüman yoluyla sonucun ters çevrilmesi ile yapılır .
list_sorted() {
# List directories
ls $* | grep "^d";
# List regular files
ls $* | grep "^-";
# List everything else (e.g. symbolic links)
ls $* | grep -v -E "^d|^-|^total"
}
Son olarak, işlevi yeni bir komuta dönüştürüyorum. Özellikle ls
fonksiyonumun bazı senaryolarda kırılması durumunda üzerine yazmak istemiyorum . O zaman kullanabilmek istiyorum ls
. Alternatif olarak, takma olmayan ls
komutu her zaman çağırarak çağırabilirsiniz \ls
.
alias ll=list_sorted
;
yerine &&
komutlar için ayırıcı olarak. Aksi takdirde, tek bir dizin içeren olmayan dizinleri içeriğini listelemek için mümkün olan (ilk ls komutu bu birleştiğinde beri bu şekilde bir sonraki komutun izin vermeyerek, yanlış olarak değerlendirilirse &&
. ;
Önler.)Bu bir komut dosyası çözümü. Yalnızca adları listeler, inode verisi yok, alfabetik, büyük / küçük harfe duyarlı değil, sütunlara biçimlendirilmiş. Her ne kadar sütun yerine satır büyükse de, varsayılan ls çıktısı gibi. > 26 karakterden oluşan bir dosya adı varsa, sütunlar biraz dağınık olur.
rm -f /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
Ve başka, bazı ekstra biçimlendirme ile.
rm -f /tmp/lsout
echo " ---- Directories ---- " >> /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
rm -f /tmp/lsout
echo " ------- Files ------- " >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
Sonuncunun çıktısı, renkleri eksi olarak aşağıdakine benzer:
---- Directories ---- archive/ bookmarks/
Desktop/ Documents/ Downloads/
fff/ health/ Library/
Movies/ Music/ Pictures/
Public/ rrf/ scifi/
testdir/ testdir2/
------- Files ------- @todo comedy
delme lll maxims
schedule vtokens style
Sadece bu betiği çağırdığından beri takma ad veya varsayılan davranışı değiştirmemeyi unutmayın.
-
önce gelird
sort