Con GNU du
(ovvero su Linux non incorporato o Cygwin), è possibile utilizzare l' --exclude
opzione per escludere i file che non si desidera abbinare.
du -s --exclude='*.html' /var/foo
Se desideri abbinare in modo positivo i *.pdf
file, dovrai utilizzare un altro metodo per elencare i file e du
visualizzerà almeno una riga di output per argomento, più un totale generale con l'opzione -c
. Puoi chiamare tail
per 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 find
o utilizzare un **/
modello se la shell lo supporta. Perché **/
, in bash, prima esecuzione shopt -s extglob
e 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, find
verrà eseguito du
più 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
?