Usando --exclude con el comando du

67

Esto es probablemente algo básico pero no puedo hacer que funcione. Estoy tratando de usar DU para obtener un tamaño total de archivos menos ciertos directorios. Necesito excluir un directorio específico llamado uploadspero no todos los directorios llamados uploads. Por ejemplo, mi estructura de archivos se parece un poco a esto:

/store
  /uploads
    /junk_to_ignore
    /more_junk_to_ignore
  /user_one
    /uploads
  /user_two

Puedo ejecutar el siguiente comando:

du -ch --exclude=uploads* 

y me da el tamaño del archivo menos todos los directorios "subidos". Sin embargo, al intentar excluir ciertos directorios (y todos sus subdirectorios) fallo. He intentado variaciones de:

du -ch --exclude=./uploads*
du -ch --exclude='/full/path/to/uploads/*'

pero parece que no puedo entenderlo. ¿Cómo excluyo un directorio específico?

Será
fuente
username: store$ du -ch --exclude=./uploadsfuncionó (con y sin comodín) para mí, desde el directorio de la tienda. ¿Está ejecutando ese comando exactamente y desde la carpeta de la tienda? Y tiene que ser la ruta relativa (que encuentra ve / imprime), no absoluta.
Kevin

Respuestas:

88

Casi lo has encontrado :)

du -ch --exclude=./relative/path/to/uploads

Tenga en cuenta que no hay asterisco al final. El asterisco significa que se deben omitir todos los subdirectorios en "cargar" , pero no los archivos directamente en ese directorio.

rozcietrzewiacz
fuente
44
Extraño ... la sintaxis con dot ( du -sb --exclude=./relative/path/to/uploads) no funciona para mí. Esto hace:du -sb --exclude relative/path/to/uploads
Nux
44
@Nux probablemente tu sabor de du. El mío (OSX) ni siquiera tiene --exclude, sino que -I maskdebe "Ignorar archivos y directorios que coincidan con la máscara especificada". En su ejemplo de trabajo, también omite el =, lo que me hace pensar que es solo su versión de duser ligeramente diferente du.
Phatskat
Sí, la versión [OSX] [1] parece una versión bastante más simplificada de [Linux du] [2]. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux
¿Qué sucede si quiero excluir varios directorios, por ejemplo, aquí excluyendo directorios junk_to_ignore y sube directorios?
Kiran K Telukunta
¿Por qué funciona con una ruta relativa, pero no con una ruta absoluta? ¡Muy raro!
Nick
9

Para excluir varios directorios, simplemente pase el indicador --exclude nuevamente.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Dave Neeley
fuente
1
también puedes usardu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen
4

impresionante para omitir los sistemas de archivos virtuales como tal

du -hsx --exclude=/{proc,sys,dev} /*
Ben Lutgens
fuente
1

Si tiene que estar en macOS, instale GNU Coreutils con el siguiente comando.

brew install coreutils

La mayoría de los comandos instalados por Coreutils tienen el prefijo g, ya que tienen un nombre BSD preinstalado en macOS. Entonces puedes hacer lo siguiente.

gdu --exclude=Microsoft /Library/Fonts/
Lei Zhao
fuente