Con GNU du
(es decir, en Linux no integrado o Cygwin), puede usar la --exclude
opción para excluir los archivos que no desea hacer coincidir.
du -s --exclude='*.html' /var/foo
Si desea hacer coincidir positivamente los *.pdf
archivos, necesitará usar algún otro método para enumerar los archivos, y du
al menos mostrará una línea de salida por argumento, más un total general con la opción -c
. Puede llamar tail
para eliminar todo menos la última línea, o sed para eliminar la palabra "total" también. Para enumerar los archivos en ese directorio, use comodines en el shell.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Si necesita recorrer archivos en subdirectorios también, use find
o use un **/
patrón si su shell lo admite. Para **/
, en bash, primero ejecute shopt -s extglob
, y tenga en cuenta que las versiones de bash hasta 4.2 atravesarán enlaces simbólicos a directorios; en zsh, esto funciona fuera de la caja.
du -sc /var/foo/**/*.pdf | tail -n1
Una complicación adicional con la versión de búsqueda es que si hay demasiados archivos, find
se ejecutará du
más de una vez, para mantenerse por debajo del límite de longitud de la línea de comando. Con el método comodín, obtendrá un error si eso sucede ("límite de longitud de línea de comando excedido"). El siguiente código supone que no tiene ningún nombre de archivo coincidente que contenga una nueva línea.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
?