Tüm dosyaları büyükten küçüğe doğru sıralamak istiyorum ve dosyalar belirli bir klasörde herhangi bir yerde bulunabilir.
man ls:-S sort by file size
Tüm dosyaları büyükten küçüğe doğru sıralamak istiyorum ve dosyalar belirli bir klasörde herhangi bir yerde bulunabilir.
man ls:-S sort by file size
Yanıtlar:
Basitçe şöyle bir şey kullanın:
ls -lS /path/to/folder/
Sermaye S .
Bu, dosyaları boyuta göre sıralayacaktır.
Ayrıca bakınız:
-S sort by file size
Tersine sıralamak istiyorsanız , sadece -ranahtar ekleyin .
Güncelleme:
Dizinleri hariç tutmak için (ve dosya adlarından hiçbirine veya sembolik bağlantı hedeflerinden hiçbirine yeni satır karakterleri içermemesi koşuluyla):
ls -lS | grep -v '^d'
Güncelleme 2:
Şimdi hala klasörler olabilen sembolik bağları nasıl gösterdiğini görüyorum. Sembolik linkler, linkte olduğu gibi daima l harfi ile başlar.
A filtrelemek için komutu değiştirin -. Bu sadece düzenli dosyalar bırakmalıdır:
ls -lS | grep '^-'
Benim sistemimde bu sadece normal dosyaları gösterir.
güncelleme 3:
Özyineleme eklemek için, satırların sıralamasını sortkomuta bırakıp, sıralamak için 5. sütunu kullanmasını söylerdim.
ls -lR | grep '^-' | sort -k 5 -rn
-rnEn üstteki en büyük dosyaları elde etmek 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, bunun gibi bir şey kullanın:
find . -type f -exec du -h {} + | sort -r -h
findKomut ardışık tüm alt dizinleri tüm dosyaları bulacaksınız .ve çağrı du -h(anlam -humanreadable disk kullanımı ) ve daha sonra tekrar çıkış sıralamak. Senin Eğer find/ sortdesteklemez -h, ile değiştirin du -kve sort -rn. Not boyut ve disk kullanımı aynı şey değildir.
dudosya boyutundan farklı olan disk kullanımını verir. (GNU) du -hile sayısal sıralama çalışmaz ( -hsıralamak için GNU seçeneğine ihtiyacınız olacaktır ). xargs, girdi olarak muhtemel olarak yazılmış kelimelerin bir listesini bekler, böylece dosya isimleri boşluk veya alıntı karakterleri içeriyorsa işe yaramaz.
find . -type f -print0 | xargs -0 du -h | sort -rh. Sadece büyük 30 dosya söylemek isterseniz: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30.
+ |sözdizimini açıklayabilir misiniz + | sort -r -h?
Bulmak ve sıralamak gibi bir şey kullanabilirsiniz.
find . -type f -ls | sort -r -n -k7
( -lsseçenek standart değildir, ancak yalnızca GNU olanı değil birçok bulma uygulamasında bulunur. GNU bul ve diğerlerinde, ls -libirkaç istisna dışında benzer bir şey görüntüler , örneğin, ACL'li dosyalar + ile işaretlenmemiş)
Dosya adları newline karakterleri içeriyorsa, GNU find ve GNU sort ile:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
Zsh ve GNU ls ile:
ls -ldU -- **/*(.OL)
Nerede (.OL)bir olan topak eleme , .seçmek için düzenli , sadece dosyaları OL(dosya boyutu uzunluğuyla sırasını tersine çevirmek için o , küçükten büyüğe için Oazalan için).
(zsh’nın eski sürümlerinde 2 ^ 32’den büyük dosya boyutlarında sorun olduğunu unutmayın).
Bazı işletim sistemlerinin bir komuta iletilen argüman listesinin boyutu üzerinde bir sınırı vardır. Bu gibi durumlarda, ihtiyacınız olacak:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
Ayrıntılı çıktıyı değil sadece dosya listesini istiyorsanız, sadece yapın:
print -rl -- **/*(.OL)
Gizli dosyaları dahil etmek (adı .ve hariç bir noktayla başlayan ..) ve gizli dizinlerde de arama yapmak istiyorsanız , Dgenelleme niteleyicisini ekleyin :
print -rl -- **/*(.DOL)
.OL? Bu komutun bir parçası mı?
ls (GNU coreutils) 8.25ve kullanıyorum zsh 5.1.1 (x86_64-ubuntu-linux-gnu). O belirli sürümlerinde sadece çalışır mı lsve zsh?
Dosyaları artan boyuta göre listelemek:
ls -lSr
Seçenekler şunlardır:
"Dosyalar belirli bir klasörde herhangi bir yerde bulunabilir" demek, başlangıç dizinindeki (klasör) tüm dizinleri (klasörler) tekrarlı bir şekilde açmak istediğinizi belirtir. Bu nedir findyapmak anlamına gelir:
find . -type f -exec ls -lSd {} +
Bu , geçerli çalışma dizinindeki ( ) tüm dosyaları "bulur" .. Bulunan her dosya lsiçin, boyut sırasına göre bulunan nesneleri sıralamak için bir işlem çalıştırılır. +İçin sonlandırıcı -execnedeni çok bağımsız değişkenler için bir liste olarak geçirilmesi için ls. Dizininiz (klasörünüz) çok fazla sayıda dosya içermiyorsa, istediğiniz sonuca yol açacak bir listeye (ve böylece bir çatal forma) sahip olmalısınız.
Dosya listesi ekranı ters sırada: ls -lSrh
Artan sipariş için: ls -lSh
Bir süre önce bu ölçüde bir şey yazdım. Kaç tane dosya listeleneceğini belirtmek için bir argüman iletebilir ya da sadece bighangi durumda 10 alırsanız yazabilirsiniz .
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
Bunları dene, 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 cevap olmasa da bir ölçüde çalışır
$ ls -lS |grep '^-' | head -n 6
sedçıktıyı kesmek için kullanıyorum
Delh'in cevabına ve Stéphane Chazelas'ın yorumuna ...
find -print0ile birlikte xargs -0boşluklar / boşluklar / whatnots için destek ekler.
du -h | sort -rn farklı bayt katları arasında doğru bir şekilde sıralama yapmaz; örneğin 1.1M, 128K'dan sonra yanlış olanı gösterir.
sort -rh (--human-numeric-sort) bununla ilgilenir, ancak yalnızca GNU'nun sürümünde çalışır.
Aşağıdaki komutlar istenen çıkışı sağlayacaktır.
GNU’nun sıralama / Linux’undan okunabilir:
find . -type f -print0 | xargs -0 du -h | sort -rh
Kilobayt biriminde, 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 .
Orijinal sorunun bir varyasyonu olarak, alt dizinlerdeki dosyaların kümülatif boyutunu görmek istiyorsanız:
#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
Boyutlar Megabayt ( min du -sm) olarak gösterilecektir . Tarafından kabul Diğer değerler duvardır -k, kilobayt için -ggigabayt için. -hİnsan tarafından okunabilir bir ekran kullanmak mümkün değildir çünkü sıralamayı bozar.
İşte megabayt sedeklemek için kullanılan bir sürüm M:
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'
Görüntülenecek dizin, ${1:-.}sağlandığı takdirde ilk komut satırı argümanını kullanacak ya da argümanlar olmadan çağrılırsa geçerli dizini kullanacak şekilde ayarlanır .
NOT: Bu çok fazla dosyayla uzun sürebilir. Bu seçenek -type dyalnızca alt dizinleri listeleyecek ve geçerli klasördeki dosyaları hariç tutacaktır; dosyaları da geçerli klasörde görmek istiyorsanız, o zaman kaldırın.
Not:
ncdubunun yerine çoğu linux reposunda (ubuntu / debian'daapt install ncdu) ve osx'de (brew install ncdu) kullanılabilir olanı kullanmak isteyebilirsiniz .