Con GNU du(ovvero su Linux non incorporato o Cygwin), è possibile utilizzare l' --excludeopzione per escludere i file che non si desidera abbinare.
du -s --exclude='*.html' /var/foo
Se desideri abbinare in modo positivo i *.pdffile, dovrai utilizzare un altro metodo per elencare i file e duvisualizzerà almeno una riga di output per argomento, più un totale generale con l'opzione -c. Puoi chiamare tailper rimuovere tutto tranne l'ultima riga, oppure sed per rimuovere anche la parola "totale". Per enumerare i file in quella directory, utilizzare i caratteri jolly nella shell.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Se è necessario attraversare i file anche nelle sottodirectory, utilizzare findo utilizzare un **/modello se la shell lo supporta. Perché **/, in bash, prima esecuzione shopt -s extglobe notare che le versioni bash fino alla 4.2 attraverseranno i collegamenti simbolici alle directory; in zsh, questo funziona fuori dagli schemi.
du -sc /var/foo/**/*.pdf | tail -n1
Un'ulteriore complicazione con la versione di ricerca è che se ci sono troppi file, findverrà eseguito dupiù di una volta, per mantenere il limite di lunghezza della riga di comando. Con il metodo jolly, si verificherà un errore se ciò accade ("limite di lunghezza della riga di comando superato"). Il codice seguente presuppone che non si disponga di un nome file corrispondente contenente una nuova riga.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf?