W GNU du
(tj. W niewbudowanym systemie Linux lub Cygwin) możesz użyć --exclude
opcji wykluczenia plików, których nie chcesz dopasowywać.
du -s --exclude='*.html' /var/foo
Jeśli chcesz pozytywnie dopasować *.pdf
pliki, musisz użyć innej metody, aby wyświetlić listę plików, i du
wyświetli co najmniej jedną linię wyjściową na argument, plus ogólną sumę z opcją -c
. Możesz zadzwonić, tail
aby usunąć wszystko oprócz ostatniego wiersza, lub sed, aby usunąć również słowo „total”. Aby wyliczyć pliki w tym jednym katalogu, użyj symboli wieloznacznych w powłoce.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Jeśli potrzebujesz również przejść do plików w podkatalogach, użyj find
lub użyj **/
wzorca, jeśli twoja powłoka to obsługuje. W przypadku **/
bash, pierwszego uruchomienia shopt -s extglob
i zauważ, że wersje bash do 4.2 będą przechodzić przez dowiązania symboliczne do katalogów; w zsh działa to od razu po wyjęciu z pudełka.
du -sc /var/foo/**/*.pdf | tail -n1
Dodatkową komplikacją związaną z wersją find jest to, że jeśli jest zbyt wiele plików, find
uruchomi się du
więcej niż jeden raz, aby zachować limit długości wiersza poleceń. Dzięki metodzie wieloznacznej pojawi się błąd, jeśli tak się stanie („Przekroczono limit długości wiersza poleceń”). Poniższy kod zakłada, że nie masz pasującej nazwy pliku zawierającej znak nowej linii.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
?