Mit GNU du
(dh unter nicht eingebettetem Linux oder Cygwin) können Sie die --exclude
Option verwenden, um die Dateien auszuschließen, die nicht übereinstimmen sollen.
du -s --exclude='*.html' /var/foo
Wenn Sie *.pdf
Dateien positiv abgleichen möchten , müssen Sie eine andere Methode zum Auflisten der Dateien verwenden und du
mindestens eine Ausgabezeile pro Argument sowie eine Gesamtsumme mit der Option anzeigen -c
. Sie können rufen tail
alle , aber die letzte Zeile zu entfernen, oder sed das Wort „total“ als auch zu entfernen. Verwenden Sie Platzhalter in der Shell, um die Dateien in diesem einen Verzeichnis aufzulisten.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Wenn Sie auch Dateien in Unterverzeichnissen durchlaufen müssen, verwenden Sie find
oder verwenden Sie ein **/
Muster, wenn Ihre Shell dies unterstützt. **/
Führen Sie in Bash zuerst aus shopt -s extglob
und beachten Sie, dass Bash-Versionen bis 4.2 symbolische Links zu Verzeichnissen durchlaufen. in zsh funktioniert dies sofort.
du -sc /var/foo/**/*.pdf | tail -n1
Eine zusätzliche Komplikation mit dem Fund Version ist , dass , wenn es zu viele Dateien sind, find
laufen du
mehr als einmal, unter der Befehlszeile Längengrenze zu halten. Bei der Platzhaltermethode wird in diesem Fall eine Fehlermeldung angezeigt ("Befehlszeilenlängenbeschränkung überschritten"). Der folgende Code setzt voraus, dass Sie keinen passenden Dateinamen haben, der eine neue Zeile enthält.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
?