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 -r
anahtar 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ı sort
komuta bırakıp, sıralamak için 5. sütunu kullanmasını söylerdim.
ls -lR | grep '^-' | sort -k 5 -rn
-rn
En ü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
find
Komut 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
/ sort
desteklemez -h
, ile değiştirin du -k
ve sort -rn
. Not boyut ve disk kullanımı aynı şey değildir.
du
dosya boyutundan farklı olan disk kullanımını verir. (GNU) du -h
ile sayısal sıralama çalışmaz ( -h
sı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
( -ls
seçenek standart değildir, ancak yalnızca GNU olanı değil birçok bulma uygulamasında bulunur. GNU bul ve diğerlerinde, ls -li
birkaç 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 O
azalan 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 , D
genelleme niteleyicisini ekleyin :
print -rl -- **/*(.DOL)
.OL
? Bu komutun bir parçası mı?
ls (GNU coreutils) 8.25
ve kullanıyorum zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
. O belirli sürümlerinde sadece çalışır mı ls
ve 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 find
yapmak anlamına gelir:
find . -type f -exec ls -lSd {} +
Bu , geçerli çalışma dizinindeki ( ) tüm dosyaları "bulur" .
. Bulunan her dosya ls
iç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ı -exec
nedeni ç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 big
hangi 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 -print0
ile birlikte xargs -0
boş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 ( m
in du -sm
) olarak gösterilecektir . Tarafından kabul Diğer değerler du
vardır -k
, kilobayt için -g
gigabayt için. -h
İnsan tarafından okunabilir bir ekran kullanmak mümkün değildir çünkü sıralamayı bozar.
İşte megabayt sed
eklemek 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 d
yalnı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:
ncdu
bunun yerine çoğu linux reposunda (ubuntu / debian'daapt install ncdu
) ve osx'de (brew install ncdu
) kullanılabilir olanı kullanmak isteyebilirsiniz .