Okunabilir boyutlara göre sayısal olarak nasıl sıralayabilirim?


20

örneğin ne kadar alan klasörü aldığını gösteren bir komutum var

du folder | sort -n

harika çalışıyor, ancak insan tarafından okunabilir bir form istiyorum

du -h folder

ancak bunu yaparsam sayısal olarak sıralayamam.

Nasıl katılınır du folderve du -h folderçıktılar şu şekilde sıralanır du folder:du -h folder

PS bu sadece bir örnek. bu teknik benim için çok yararlı olabilir (mümkünse)

Yanıtlar:


11

İşte daha genel bir yaklaşım. Çıktısını alın du folderve du -h folderiki farklı dosyalarda.

du folder > file1
du -h folder > file2

Anahtar kısım şudur: uygun bir sınırlayıcı ile sırala file1ve file2satır satır.

paste -d '#' file1 file2 > file3

(varsayarak #görünmez file1ve file2)

Şimdi sırala file3. Bunun file1içeriğe göre sıralanacağını ve file2içeriklere göre kopacağını unutmayın. Aşağıdakileri kullanarak ilgili sonucu çıkarın cut:

sort -n -k1,7 file3 | cut -d '#' -f 2

Ayrıca man sortdiğer seçeneklere de göz atın .


Bunu daha sonra tekrar kullanmak için takma ad olarak da kaydedebilirsiniz. Bunu yapmak için aşağıdakilerin altına ekleyin ~/.bashrc:

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

Ardından, yeni bir terminal oturumu açın ve yeni takma adınızı yürütün:

sorted-du /home

Çözümünüzü nasıl takma ad haline getireceğinizle ilgili son bölümü ekledim.
SirCharlo

1
Bir takma adda gerçek dosyaları kullanmak (ve sonra onlara rm çağırmak) gerçekten kötü bir fikir ! Aslında dizinimde bir dosya olsaydı ne olacağını düşün file3, üzerine yazılır ve sonra silinir! @SirCharlo Bu yanıttan takma ad tanımını kaldırıyorum ve daha güvenli bir şeyle değiştiriyorum.
jmiserez

Peki askubuntu.com/a/80248/22308 sadece bunu yapmaksort -h
Nam G VU

36

Şuna benzer bir şey deneyin:

du -h folder | sort -h

Alternatifleri: -nSayısal sıralama için

Not: -hsıralama seçeneği yalnızca Ubuntu'nun yeni sürümlerinde bulunur.


3
8.17 sürümü var, bu yüzden bu en kolay yol sanırım
steabert

1
Sıralama komutunun sort --version = 8.17'den geliştirildiğine dikkat çeken steabert sayesinde bu Ubuntu'nun yeni sürümleri için en iyi yanıttır.
Kat Amsterdam

Bu kabul OP olmalıdır ile net çekim neden OPsort -h
Nam G VU

4

Bu yanıt 10.04.4LTS ve daha düşük Ubuntu sürümleri için geçerlidir .

Ne yazık ki KMG'yi sıralayan doğru cevap zor ve karmaşıktır:

Tüm du komutunu, bunu kullanarak insan tarafından okunabilir bir şekilde sıralayabilirsiniz.

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

burada bulduğum

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

Sadece bilmek istediğiniz klasöre cd sonra duf

duf komutunu yarı kalıcı yapmak için bu duf diğer adını /home/user/.profile dosyanızın sonuna ekleyebilirsiniz.

Sonuçlar:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

İşte neden du -sch /var/* | sort -nçalışmıyor MKKMMKKMMK sıralama görmek

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

Bunu du-h işlevini bir sıralama özelliğiyle geliştirmek için bir özellik isteği olan gnu-core geliştiricilerine bildirdim. bugs-coreutils@gnu.org aracılığıyla
Kat Amsterdam

+1, benzer bir astarlı:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert

Sadece 1 astarınızı canlı bir sistemde denedim. Erişim Engellendi hatası alın ve sonuç alınmadı. Bu komutu önce bir Ubuntu sisteminde denediniz mi? Klasörü / home / username olarak değiştirdim
Kat Amsterdam

oh, üzgünüm, bırakmalısınız -d '', bu dosya komutunun çıkışında kullanmaktan başka bir şey değil.
steabert

Bu, GNU'yu desteklemeyen Linux dışı sistemlerde harika çalışıyor gibi görünüyor sort.
Stefan Lasiewski

2

GNU komutu sortaşağıdaki seçeneğe sahiptir:

-h, --human-numeric-sort okunabilir insan sayılarını karşılaştırın (ör. 2K 1G).

BSD / OSX bu seçeneği için, yükleyebilir sortdan coreutils(aracılığıyla brew) ve Blogunuza bin klasör eklemek PATHiçin içine rc dosyaları.

Yani komut şöyle görünür:

du -ah . | sort -rh | head -20

0

Ubuntu'nun son sürümleri için kullanın du -h directory | sort -h.

Kontrol dışı dosyaları bulmak için her zaman bunun bir formunu kullanıyorum.


Cevaplanan cevap 17 Kasım 11: 17'de Allu2
Elder Geek

0

Ctrl+ Alt+ İle terminalinizi açın tve şunu yazın:

  du -sk * | sort -rn 

: DI artık Ctrl + Alt + t'yi yukarıdaki biçime o kadar çok değiştirmeye alışkınım ki gerekli biçimi Xpad'ime yapıştırdım. : D Böyle bir görev için iltifat etmek harika bir duygu :)
jobin

Burada yaptığınız her işi tamamlamaya değer.
rɑːdʒɑ

0

Desteklemeyen sistemlerde boşluk veya kesme işareti ve çalışmalarıyla Bu seferki kolları dosya adları xargs -dveya sort -h:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

sonuç:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

Değiştirilmesi amacı ne \nile \0? Bunun için biraz geç değil mi?
muru

xargs -0girdiyi NUL ile sınırlandırılmasını bekleyen girdiyi hazırlar (find -print0'in üreteceği gibi). Aksi takdirde -0 kullanamazsınız ve kesme işaretlerinin özel bir anlamı vardır.
Mark Crossfield

Biliyorum -0, ama ilgisiz: imgur.com/87w3vfj
muru

Bence bu kesme işareti kullandığınız için ters işaret kullandığınız gibi çalışıyor. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield

0

Sürümden bağımsız olarak tüm sistemler üzerinde çalışırken bulduğum ( sort -hbenim için çalışmıyor)

du -h $(du * | sort -n | awk '{print $2}')

awk '{print $2}'temelde dosya adlarını yazdırır.

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.