Zastanawiam się, czy możemy połączyć uczciwość „du” z wciętym formatowaniem „drzewa”. Jeśli chcę listę rozmiarów katalogów:
du -hx -d2
... wyświetla dwa poziomy głębokości i wszystkie podsumowania rozmiarów są uczciwe, ale nie ma wcięć subdirów. Z drugiej strony:
tree --du -shaC -L 2
... ładnie wcina i koloruje, jednak podane rozmiary są kłamstwem. Aby uzyskać rzeczywiste rozmiary, należy:
tree --du -shaC
... co oznacza, że otrzymujesz prawdziwe rozmiary tylko wtedy, gdy pozwolisz drzewu pokazać całą strukturę katalogów. Chciałbym móc zawsze mieć poprawne podsumowania wielkości, niezależnie od tego, ile poziomów podkatalogów chcę wyświetlić. Często to robię:
tree -du -shaC | grep "\[01;34m"
... który przycina wszystko oprócz katalogów i ładnie je wcina ... ale nie ma łatwego sposobu ograniczenia wyświetlania tylko do określonych poziomów liczbowych (bez kłamliwych podsumowań). Czy istnieje sposób? Być może brakowało mi właściwych przełączników ...
źródło
Nie musisz grep dla kodu koloru,
-d
opcja jestlist directories only
.Wydaje się, że robi to, co chcesz:
grep
Polecenie usuwa wszystkie linie, które (po jednej lub więcej przestrzeni przez nie przestrzeni, a następnie miejsca) dwa razy, a następnie[
.Jeśli chcesz głębokość 1, zmień licznik związany w {} nawiasach klamrowych na
{1}
zamiast{2}
. to samo, jeśli chcesz głębokość 3, zmień ją na{3}
.Możesz zmienić to w funkcję powłoki, tak jak to:
Służy
getopts
do „kradzieży” dowolnej-L
opcji i jej argumentu ztree
linii poleceń, jeśli taka istnieje. Jeśli nie ma-L n
opcji w wierszu poleceń, to też działa.Wszystkie inne opcje i argumenty są przekazywane do
tree
polecenia.local PATTERN=...
Linia nie jest to naprawdę konieczne. Zrobiłem to tylko w ten sposób, aby upewnić się, że zmieści się w jednej linii, a nie zawinie w tym miejscuU&L
. Wyrażenie regularne mogłoby i prawdopodobnie powinno po prostu przejść bezpośrednio dotree | grep ...
linii.Uruchom tak:
lub
źródło
-L
problemie, w ogóle o nim nie wspomniałeś-d
. Teraz, gdy przyjrzę się bliżej zgłoszonym liczbom, anitree --du
nietree --du -d
zgłaszam rozmiarów, które w jakikolwiek sposób przypominają te zgłoszone przezdu
.tree --du
i tak nie wydaje się podawać prawidłowych rozmiarów katalogów, z lub bez-d
lub-L
. Nie mam pojęcia, jakie powinny być liczby, ale nie mają one związku z tym, jakiedu
raporty.Możesz użyć Dutree
źródło
Nie ma żadnego doskonałego narzędzia do polecenia, aby to zrobić, ale znalazłem dwa sposoby, które są blisko.
pokazuje zarówno rozmiar folderów, jak i plików, ale nie pokazuje się w trybie drzewa.
du -ah --max-depth=1 /var/log
pokazuje w trybie drzewa, ale tylko rozmiar plików, foldery są policzone
tree -ah /var/log -L 1
źródło
Zainspirowany przez cas, teraz robię to:
źródło
"$@"
natychmiast po-shaC
. w przeciwnym razie ta funkcja jest na stałe zakodowana do pracy tylko w bieżącym katalogu.getopts
jest to, że opcje mogą pojawiać się w dowolnej kolejności w wierszu poleceń. Początkowa wersjamytree
funkcji, którą napisałem, używała „$ 1”, podobnie jak twoja, więc argument głębokości musiał być pierwszym argumentem i nie był opcjonalny. Uznałem, że to nie jest wystarczająco dobre, więc użyłem wbudowanego bashagetopts
do przetworzenia-L
opcji. Umożliwiło to wyświetlenie-L n
opcji w dowolnym miejscu wiersza polecenia. Pozwoliło to również być całkowicie opcjonalne.getopts
pozwala pisać skrypty, które przyjmują prawdziwe opcje i argumenty (zamiast tylko argumentów na pozycjach zakodowanych na stałe, takich jak 1 $ 2 $ 3 $ itp.), tak jak większość innych programów w twoim systemie. A jeśli korzystasz zgetopt
programu (uwaga, która nie zawieras
) zutil-linux
pakietu, możesz używać zarówno krótkich opcji jednoliterowych (np.-l
), Jak i długich (jak--long
), tak jak programów GNU.