Polecenie dir
listowania katalogów Windows ma na końcu wiersz pokazujący całkowitą ilość miejsca zajmowanego przez wymienione pliki. Na przykład dir *.exe
pokazuje wszystkie .exe
pliki w bieżącym katalogu, ich rozmiary i sumę ich rozmiarów. Chciałbym mieć podobną funkcjonalność z moim dir
aliasem w bash, ale nie jestem pewien, jak to zrobić.
Obecnie mam alias dir='ls -FaGl'
w swoim .bash_profile
pokazie
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
na przykład. Biorąc odpowiedzi na to pytanie :
dir | awk '{ total += $4 }; END { print total }'
co daje mi sumę, ale nie drukuje samej listy katalogów. Czy istnieje sposób, aby zmienić to w skrypt jednowierszowy lub skrypt powłoki, aby móc przekazać dowolne ls
argumenty dir
i uzyskać pełną listę plus suma sumy? Na przykład chciałbym uruchomić, dir -R *.jpg *.tif
aby uzyskać listę i całkowity rozmiar tych typów plików we wszystkich podkatalogach. Idealnie byłoby świetnie, gdybym mógł uzyskać rozmiar każdego podkatalogu, ale nie jest to konieczne.
źródło
ls -lh
pomaga? Drukuje całkowitą sumę na górze. Możesz także uruchomić,du -sh *.exe
aby uzyskać informacje o użyciu miejsca na dysku w postaci czytelnej dla człowieka.ls -lh
drukuje „suma” , ale nie zawsze jest to związane z tym, coawk
obliczają poniższe skrypty lub co sumuję ręcznie. Czasami jest zbliżona do liczby KB plików w katalogu, ale wydaje się, że nie stosuje przydzielonych rozmiarów podkatalogów. Byłbym wdzięczny, gdybyś mógł wskazać mi, czym dokładnie jest ta liczba ...ls -lh
nie pokazuje całkowitej wielkościOdpowiedzi:
Poniższa funkcja wykonuje większość zadań, o które prosisz:
... ale nie da ci tego, o co prosisz
dir -R *.jpg *.tif
, bo to nie takls -R
działa. W tym celu możesz skorzystać zfind
narzędzia.źródło
dir
to już nazwa popularnego GNU coreutil, raczej nie nazwałbym takiej funkcji.Jest już na to polecenie UNIX:
du
Po prostu zrób:
Zgodnie z konwencją na końcu polecenia można dodać jedną lub więcej ścieżek do plików lub katalogów.
-h
jest rozszerzeniem do konwersji rozmiaru na format przyjazny dla człowieka,-a
daje „pozorny” rozmiar (rozmiar pliku zamiast użycia dysku) i-c
daje sumę końcową.źródło
du
podaje użycie dysku, a nie sumę rozmiarów plików.du -h
nie sumuje rozmiarów przekazywanych do niego plików.du -h *.so
pokazuje rozmiar każdego pliku, ale nie sumę. Myślę, że to, czego tu chcesz, todu -hc *.so
(a nawetdu -hc *.so | tail -1
). Ale oczywiście chce też listy katalogów.-a
oznacza--all
. Rozważ raczej użycie--apparent-size
Możesz użyć
du -h -c directory|tail -1
To wygeneruje pojedynczą linię z wykorzystaniem pamięci.
źródło
du -hs directory
jeśli chcesz tylko sumę.Wystarczy wydrukować bieżący wiersz, który sumujesz:
źródło
z perlem:
Rozmiar wszystkich nie ukrytych plików PDF w bieżącym katalogu.
źródło
Dodanie następującego do .bash_profile lub .bashrc działa dla mnie.
Teraz, gdy robię katalog * .mp3, robi to rekurencyjnie i drukuje sumę na końcu. Możesz kontrolować, ile głębokości chcesz, dodając parametr maxdepth do znalezienia. Wiem, że bieganie dwa razy nie jest bardzo skutecznym pomysłem. Ale nie mogłem wymyślić lepszego sposobu. Przynajmniej wykonuje zadanie.
źródło
Użycie instrukcji du i awk , takich jak wspomniana powyżej, zapewni to, czego szukasz.
Przykład:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'
Spowoduje to wyświetlenie listy wszystkich plików w folderze Pobrania użytkownika abc o rozszerzeniu .jpg i wydrukowanie sumy wszystkich tych plików na końcu listy.
źródło
Aby uzyskać zarówno dane wyjściowe, jak i obliczenia rozmiaru, bez korzystania z innych proponowanych opcji, możesz użyć tee (1) i podstawienia procesu ...
źródło
tee
, po prostudir | awk '{print; total += $4}; END {print total}'
źródło
linux sum human readable sizes
i właśnie tego szukam.źródło