Yalnızca dosya du ile boyut alma


50

Du komutunu kullanarak tüm dosyaların ve alt dosyalarındaki tüm dosyaların boyutunu nasıl alabilirim.

Tüm dosyaların (ve alt dizinlerdeki dosyaların) boyutunu almak için aşağıdaki komutu kullanıyorum

find . -type f | du -a

Ancak bu, klasör boyutlarını da yazdırır. Alt dizinlerdeki tüm dosya ve dosyaların boyutlarının listesini nasıl alabilirim? Ben de denedim exec flagama sonuçlarını yürütür sonra boruya nasıl emin başka komutun içine çıkış değilim findiçine du.

İşletim sistemi ksh kabuklu AIX 6.1'dir.

Yanıtlar:


56

Genelde -execyardımcı programı kullanırım . Bunun gibi, böyle:

find . -type f -exec du -a {} +

GNU ile hem bash hem de ksh denedim. AIX'i hiç denemedim, ancak bulma sürümünüzün bazı -execsözdizimlerine sahip olduğundan eminim .

Aşağıdaki kod parçası, önce en büyüğü olan listeyi sıralar:

find . -type f -exec du -a {} + | sort -n -r | less

3
find -print0Veya diğer GNU özelliklerine erişiminiz yoksa, bu cevaba giderdim . Mümkünse, \;bununla değiştirme , \+daha az istilaya duve dolayısıyla daha iyi performansa neden olacaktır.
jw013

Teşekkürler, bu özellikle işe yarar çünkü du, farklı birimlerde büyüklük için bir bayrak sunar.
Shardul Upadhyay

+Seçenek hakkında bilgi bulamadım . Bu seçenek bir seçenek midir , duyoksa find? Ve neden daha az çağrıyla sonuçlanıyor?
Amelio Vazquez-Reina,

1
Bu standart bir seçenek find. O kadar belirtir exec(bizim durumumuzda komuta dutüm sonuçları ile sadece bir defa) findkomutuna ardışık Bağımsız değişken olarak verilen.
rahmu

wtf, neden böyle bir komut yokdu -f --threshold=1G
Alexander Mills

16

GNU yardımcı programlarınız varsa, deneyin

find . -type f -print0 | du --files0-from=-

Print0'un geçerli bir komut olmadığını ve son eksi tanınmış bir bayrak olmadığını söyleyerek komut başarısız oluyor. Bu yaklaşımın işe yarayacağını sanmıyorum çünkü man dubir filesya da frombayrağı listelemiyor .
Shardul Upadhyay

İşletim sisteminizi soruya etiket olarak eklemelisiniz. GNU’nuz olduğunu varsaydım ama bundan bahsetmeyi unuttum.
jw013

1
Bana bir oy ver! Özel çözümünüz du -chtoplam eşleşen dosyalardan oluşan toplamı elde etmek için çalışır :find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn

9

Ben genellikle kullanırım:

find . -type f -print0 | xargs -r0 du -a

Xargs, genellikle hiçbir argüman olmasa bile komutu çağırır; xargs du </dev/nullhala xargs -r du </dev/nullaranacak, du demeyecek. -0Yerine yeni satır boş sonlandırılmış dizeler için argüman görünüyor sonlandırıldı.

Sonra genellikle | awk '{sum+=$1} END {print sum}'toplamı elde etmek için son eklerim .


2
then I usually add:-) altın değerinde
Radek

2

İşte uzun parametre adları ve insan sıralama içeren bir sürümü.

find . -type f -exec du --human {} + | sort --human --reverse | head

Ben de gerek olmadığını ifade ettiği -a/--allgeçirilecek du.


-2

geçerli dizindeki belirli dosyalar

du -ch files*

daha kısa ve benim için çalışıyor

du -sh .

Geçerli dir ve sub içindeki tüm dosyalar için

du (GNU coreutils) 8.30


1
(1) Ne demek istiyorsun du -ch files*? Geçerli dizini içeren varsayalım ant, apple, banana, bat, cat, corn, date, ve dog, nerede hayvan isimleri alt dizinleri ve meyve / sebze isimleri dosyalardır - sadece dosyaları almak için kullanacağı komut? Yoksa demek istediğin bu değil miydi? (2)  du -sh .mevcut dizinde ve altındaki her şeyin toplamını rapor eder, dosyaları kendileri değil. Bu hemen hemen sorulanın tam tersi.
G-Man
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.