it-swarm-tr.com

Boyuta göre sıralanan tüm dosyalar nasıl listelenir?

Tüm dosyaları büyükten küçüğe doğru sıralamak istiyorum ve dosyalar belirli bir klasörde herhangi bir yerde bulunabilir.

268
Joe

Bunun gibi bir şey kullanın:

ls -lS /path/to/folder/

Büyük harf [~ # ~] s [~ # ~] .

Bu, dosyaları boyuta göre sıralar.

Ayrıca bakınız:

man ls

-S     sort by file size

ters sırayla sıralamak isterseniz, -r Anahtarını eklemeniz yeterlidir.

Güncelleme:

Dizinleri hariç tutmak (ve dosya adlarının veya simge bağlantısı hedeflerinin hiçbirinin yeni satır karakteri içermemesi):

ls -lS | grep -v '^d' 

Güncelleme 2:

Şimdi hala klasör olabilen sembolik bağlantıları nasıl gösterdiğini görüyorum. Sembolik bağlantılar her zaman bağlantıda olduğu gibi l harfiyle başlar.

- İçin filtreleme komutunu değiştirin. Bu yalnızca normal dosyalar bırakmalıdır:

ls -lS | grep '^-'

Sistemimde bu yalnızca normal dosyaları gösterir.

güncelleme 3:

Özyineleme eklemek için, satırların sıralamasını sort komutuna bırakıp sıralamak için 5. sütunu kullanmasını söylerdim.

ls -lR | grep '^-' | sort -k 5 -rn

-rn, En büyük dosyaları en üste çıkarmak için Ters ve sayısal anlamına gelir. Bu komutun aşağı tarafı, dosyaların tam yolunu göstermemesidir.

Dosyaların tam yoluna ihtiyacınız varsa, şöyle bir şey kullanın:

find . -type f  -exec du -h {} + | sort -r -h

find komutu, . Tüm alt dizinlerindeki tüm dosyaları özyinelemeli olarak bulur ve du -h 'U çağırır (anlamı disk kullanımı -insan okunabilir) ve sonra çıktıyı yeniden sıralayın. find/sort öğeniz -h 'U desteklemiyorsa, du -k Ve sort -rn İle değiştirin. boyut ve disk kullanımı aynı şey değildir.

308
delh

Bul ve sırala gibi bir şey kullanabilirsiniz.

find . -type f -ls | sort -r -n -k7

(-ls seçeneği standart değildir, ancak yalnızca GNU one. değil, birçok find uygulamasında bulunur. In GNU find ve diğerleri, birkaç istisna dışında ls -li benzeri bir şey görüntüler, örneğin, ACL'leri olan dosyalar + ile işaretlenmez)

Dosya adları yeni satır karakterleri içeriyorsa, GNU find ve GNU sort:

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
26
Mark Cohen

Zsh ve GNU ls ile:

ls -ldU -- **/*(.OL)

(.OL), # glob niteleyici , . düzenli sadece dosya, OL uzunluğa göre sıralamayı tersine çevirmek için (dosya boyutu, artan düzen için o, azalan düzen için O).

(zsh'nin eski sürümlerinde 2 ^ 32'den büyük dosya boyutlarıyla ilgili sorunlar olduğunu unutmayın).

Bazı işletim sistemlerinin bir komuta iletilen bağımsız değişken listesinin boyutu üzerinde bir sınırı vardır. Bu durumlarda ihtiyacınız olacak:

autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU

Ayrıntılı çıktıyı değil, sadece dosya listesini istiyorsanız, şunları yapın:

print -rl -- **/*(.OL)

Gizli dosyaları (adı . Ve .. Hariç bir nokta ile başlayan) eklemek ve gizli dizinlerde de arama yapmak istiyorsanız, D globbing niteleyicisini ekleyin:

print -rl -- **/*(.DOL)
10

Dosyaları boyuta göre artan şekilde sırala:

ls -lSr

Seçenekler:

  • l: uzun, ayrıntılı kullanıcı, grup, diğer özellikler, tarih vb. gösterir.
  • S: boyuta göre listelenen siparişler (varsayılan olarak azalan)
  • r: listenin sırasını tersine çevirir
9
Baker

"Dosyalar belirli bir klasörde herhangi bir yerde bulunabilir" demek, başlangıç ​​dizinindeki (klasör) tüm dizinleri (klasörleri) yinelemeli olarak azaltmak istediğiniz anlamına gelir. find'in amacı budur:

find . -type f -exec ls -lSd {} +

Bu, geçerli çalışma dizinindeki tüm files öğesini "bulur" (.). Bulunan her dosya için, boyut düzeninde bulunan nesneleri sıralamak için ls işlemi çalıştırılır. + _ ile sonlandırıcı -exec, ls öğesine liste olarak birden çok bağımsız değişken geçirilmesine neden olur. Dizininiz (klasör) çok fazla sayıda dosya içermediği sürece, istediğiniz bir sonuca götürecek bir listeniz (ve böylece bir işlem çatallanmış) olmalıdır.

7
JRFerguson

Bunları deneyin, benim için iyi çalışıyor.

$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10

# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'

Mükemmel bir cevap değil ama bir ölçüde çalışıyor

$ ls -lS |grep  '^-' | head -n 6 
4
Sand1512

Dosya listesi ters sırada görüntülenir: ls -lSrh

Artan düzen için: ls -lSh

4
user174839

Bir süre önce bu kapsamda bir şeyler yazdım. Listelenecek dosya sayısını belirtmek için bir argüman iletebilir veya big yazabilirsiniz, bu durumda 10 alırsınız.

big () { 
    NUM_FILES=10;
    if [ $1 ]; then
        NUM_FILES=$1;
    fi;
    du | sort -nr | head -n $NUM_FILES
}
2
Emanuel Berg

Deluxe cevap ve Stéphane Chazelas'ın yorumu ekleniyor ...

find -print0 ile kombine xargs -0 boşluklar/boşluklar/whatnots için destek ekler.

du -h | sort -rn farklı bayt katları arasında düzgün sıralama yapmıyor, ör. 1.1M 128K'dan sonra gösterecektir, bu yanlıştır.

sort -rh (--hüman-numeric-sort) bununla ilgilenir, ancak yalnızca GNU'nun sürümünde çalışır.

Aşağıdaki komutlar istenen çıktıyı sağlayacaktır.

GNU'nun türündeki/Linux'unda insan tarafından okunabilir:

find . -type f -print0 | xargs -0 du -h | sort -rh

Kilobayt birimlerinde, BSD/OSX/diğerlerinde:

find . -type f -print0 | xargs -0 du -k | sort -rn

BSD/OSX için ayrıca bkz. https://unix.stackexchange.com/a/188375/82895 .

1
djule5

Orijinal sorunun bir varyasyonu olarak, alt dizinlerdeki dosyaların toplu boyutunu görmek istiyorsanız:

#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr

Boyutlar Megabayt cinsinden görüntülenir (du -sm İçindeki m). du tarafından kabul edilen diğer değerler kilobaytlar için -k, Gigabaytlar için -g. Sıralanabilirliği bozacağından, insan tarafından okunabilir ekran için -h Kullanmak mümkün değildir.

Megabayt için sed eklemek için M kullanan bir sürüm:

find ${1:-.} -maxdepth 1  -type d  -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'

Görüntülenecek dizin, sağlanmışsa ilk komut satırı bağımsız değişkenini veya bağımsız değişkenler olmadan çağrılırsa geçerli dizini kullanan ${1:-.} Aracılığıyla ayarlanır.

NOT: Bu, birçok dosyayla uzun sürebilir. -type d Seçeneği yalnızca alt dizinleri listeler ve geçerli klasördeki dosyaları hariç tutar; geçerli klasördeki dosyaları da görmek istiyorsanız kaldırın.

Not: ncdu yerine çoğu Linux deposunda (ubuntu/debian apt install ncdu) Ve osx'ta (brew install ncdu).

1
ccpizza