'du' ve 'ağaç'ın en iyilerini birleştir


21

'Du' dürüstlüğünü 'tree' şeklindeki girintili biçimlendirme ile birleştirip birleştiremeyeceğimizi merak ediyorum. Dizin boyutlarının bir listesini görmek istersem:

du -hx -d2

... iki seviye derinlikte görüntüler ve tüm boyut özetleri dürüsttür, ancak alt dizelerin girintisi yoktur. Diğer yandan:

tree --du -shaC -L 2

... güzel girintiler ve renklendirmeler, ancak bildirilen boyutlar yalandı. Gerçek boyutları elde etmek için bir zorunluluktur:

tree --du -shaC

... ki 'ağaç' size tüm dizin yapısını göstermesine izin verirseniz, sadece gerçek boyutları elde edersiniz. Ne kadar alt düzey göstermek istediğimden bağımsız olarak her zaman doğru boyut özetlerinin olmasını isterdim. Sık sık bunu yapıyorum:

tree -du -shaC | grep "\[01;34m"

... dizinleri hariç her şeyi eritir ve onları güzelce girintiler ... ama gösterimi sadece belirli bir sayı seviyesine sınırlamanın kolay bir yolu yoktur (özetler yalan olmadan). Bir yolu var mı? Belki de doğru anahtarları özledim ...

Yanıtlar:


8

Ayrıca ödeme ncdu : http://dev.yorhel.nl/ncdu

Sayfa ayrıca diğer "benzer projeleri" de listeler:

gt5 - Ncdu'ya benzer, ancak farklı bir yaklaşım.

tdu - Başka bir küçük ncurses tabanlı disk kullanımı görselleştirme aracı.

TreeSize - Bir treeview kullanarak GTK.

Baobab - GTK, pasta grafikler, ağaçlandırma ve ağaçlandırma kullanarak. GNOME ile birlikte gelir.

GdMap - Ağaç izlemeli ekranlı GTK.

Filelight - KDE, pasta grafiklerini kullanarak.

KDirStat - Ağaç gövdesi ekranı olan KDE.

QDiskUsage - QT, pasta grafiklerini kullanarak.

xdiskusage - Ağaç görüntüsü ekranı olan FLTK.

fsv - 3D görselleştirme.

Philesight - Web tabanlı Filelight klonu.


1
Sağol David, nihayet bunlara bakmaya başladı. Ncdu'yu seçtim.
Ray Andrews,

@David tdu nereden geliyor?
Shirish

@shirish Yukarıda belirtilen kaynağa bakın
David Potočnik

11

Renk kodu için grep gerekmez, -dseçenek list directories only.

Bu istediğini yapmak gibi görünüyor:

$ tree --du -d -shaC | grep -Ev '(  *[^ ]* ){2}\['
.
├── [  18]  dir1
├── [  30]  dir2
├── [ 205]  junk
│   ├── [  18]  dir1
│   ├── [  30]  dir2
│   └── [  76]  dir3
├── [ 119]  merge
└── [  20]  stuff

 4.4K used in 10 directories

grepKomut, iki kez, bir takip (bir ya da daha fazla boşluk ardından bir boşluk olmayan bir alan elde edilmiş) tüm satırları kaldırır [.

1 derinliği istiyorsanız, {} kaşlı ayraçlar içindeki sınır sayısını {1}yerine değiştirin {2}. Aynı derinlik 3 istiyorsanız, değiştirin {3}.

Bunu şöyle bir kabuk fonksiyonuna dönüştürebilirsiniz:

mytreedu() {
  local depth=''

  while getopts "L:" opt ; do
      case "$opt" in
          L) depth="$OPTARG" ;;
      esac
  done

  shift "$((OPTIND-1))"

  if [ -z "$depth" ] ; then
      tree --du -d -shaC "$@"
  else   
      local PATTERN='(  *[^ ]* ){'"$depth"'}\['
      tree --du -d -shaC "$@" | grep -Ev "$PATTERN"
  fi
}

Bu , varsa getoptsherhangi bir -Lseçeneği ve argümanını treekomut satırından "çalmak" için kullanılır . -L nKomut satırında bir seçenek yoksa , o zaman da çalışır.

Diğer tüm seçenekler ve argümanlar treekomuta geçer.

local PATTERN=...Satır gerçekten gerekli değildir. Bunu sadece tek bir satıra sığacağından ve burada kelimelere sarılmayacağından emin olmak için yaptım U&L. Düzenli ifade muhtemelen doğrudan tree | grep ...satıra girebilir ve muhtemelen gitmelidir .

Bu şekilde çalıştırın:

mytreedu 

veya

mytreedu -L 2 /path/to/dir/

1
Kodu seviyorum, fakat '-d' yi kullanamayacağınızı tekrarlayın çünkü eğer yaparsanız, boyut özetleri yanlış veya en azından buradalar. Boyut her zaman '4096' olarak bildirilir; bu, dir için girilen girişin boyutudur, ancak içeriğinin tümü değil.
Ray Andrews

... geçerli dizindeki her bir dizin için '4096' demeliydim ... ama dosyaları da içeren direk boyutlarını alamazsınız.
Ray Andrews

Sadece -Lbir sorun olarak bahsettin -d, hiç bahsetmedin . Artık rapor edilen sayılara daha yakından bakıyorum, ne rapor ne tree --dude tree --du -dbunlara benzeyen boyutlar du.
cas

% 100’den daha düşük bir göstergenin size doğru boyutlar vermeyeceğine işaret edin. '-D' veya '-L 2' veya başka bir şeyle sınırlandırabilirsiniz - gösterilmez, boyut olarak sayılmaz.
Ray Andrews

tree --dubirlikte veya olmadan, zaten dizinleri için doğru boyutları vermek görünmüyor -dya -L. Sayıların ne olması gerektiği hakkında hiçbir fikrim yok, ama hangi duraporlarla ilgisi yok .
Cas

3

Dutree kullanabilirsiniz

görüntü tanımını buraya girin

  • LS_COLORS ortam değişkenine göre renkli çıktı.
  • dosya sistemi ağacını görüntüle
  • küçük dosyaları toplama yeteneği
  • dosyaları veya dizinleri dışlama yeteneği
  • Farklı dizinleri karşılaştırabilme
  • hızlı, pas yazılmış

1

Bunu yapmak için mükemmel bir komut aracı yok, ama yakın iki yol buldum.

  • hem klasörleri hem de dosyaların boyutunu gösterir, ancak bir ağaç modunda gösterilmez.

    du -ah --max-depth=1 /var/log

  • ağaç modunda gösterilir ancak yalnızca dosyaların boyutunda, klasörler sayılır.

    tree -ah /var/log -L 1


0

Cas'dan ilham alıyorum, şimdi bunu yapıyorum:

treee ()
{
    integer levels=$(( ($1 + 1) * 4 ))
    tree --du -shaC | grep "\[01;34m" | grep -Ev "^[^\[]{$levels}\[*"
    du -sh .
}

Eğer tüm getopts eşyalarını atacaksanız, en azından "$@"hemen ardından hala sahip olmalısınız -shaC. Aksi halde, bu işlev yalnızca geçerli dizin için çalışmak üzere kodlanmış demektir.
kas

İşi hallettikten sonra, size şunu soracaktım: lütfen detaylandırın. Tabii ki "$ @" hakkında, ama şimdiye kadar sadece şimdiki dir. Tüm bu 'getopts' şeyleri benim için yeni, orada ne düşündüğünüzü bilmek isterim.
Ray Andrews

Kullanmanın yararlarından getoptsbiri, seçeneklerin komut satırında herhangi bir sırayla görünebilmesidir. Yazdığım mytreefonksiyonun ilk versiyonu tıpkı sizinki gibi "$ 1" i kullandı, bu nedenle derinlik argümanı ilk argüman olmalıydı ve isteğe bağlı değildi. Bunun yeterince iyi olmadığına karar verdim, bu yüzden seçeneği getoptskurmak için bash yerleşikini kullandım -L. Bu, -L nseçeneğin komut satırında herhangi bir yerde görünmesine izin verdi . Ayrıca tamamen isteğe bağlı olmasına izin verdi.
cas

Buna bakmanın başka bir yolu da, getoptssisteminizdeki diğer programların çoğunda olduğu gibi, gerçek seçenekler ve argümanlar (sadece $ 1 $ 2 $ 3 gibi kodlanmış konumlarda değil) bulunan komut dosyalarını yazmanıza izin vermesidir. Ve eğer getoptprogramı (paketsiz olanı not s) kullanıyorsanız, GNU programları gibi util-linuxkısa tek harfli seçenekleri (örn. -l) Ve uzun seçenekleri (gibi --long) kullanabilirsiniz.
cas

Ah ... şimdi bana geri dönüyor. Evet, aslında bir kere kullandım. Ona bir daha bakmak gerekir. Teşekkürler.
Ray Andrews
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.