Utilisation de --exclude avec la commande du

67

C'est probablement quelque chose de fondamental mais je ne peux pas le faire fonctionner. J'essaie d'utiliser DU pour obtenir une taille totale de fichiers moins certains répertoires. J'ai besoin d'exclure un répertoire spécifique appelé, uploadsmais pas tous les répertoires appelés uploads. Par exemple, ma structure de fichier ressemble un peu à ceci:

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

Je peux lancer la commande suivante:

du -ch --exclude=uploads* 

et il me donne la taille du fichier moins tous les répertoires "uploads". Cependant, en essayant d'exclure certains répertoires (et tous ses sous-répertoires), j'échoue. J'ai essayé des variantes de:

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

mais n'arrive pas à comprendre. Comment puis-je exclure un répertoire spécifique?

Volonté
la source
username: store$ du -ch --exclude=./uploadstravaillé (avec et sans le caractère générique) pour moi, à partir du répertoire du magasin. Exécutez-vous cette commande exactement et à partir du dossier de stockage? Et ce doit être le chemin relatif (trouver, voir / imprimer), pas absolu.
Kevin

Réponses:

88

Vous l'avez presque trouvé :)

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

Notez pas d' astérisque à la fin. L'astérisque signifie que tous les sous-répertoires de "upload" doivent être omis - mais pas les fichiers directement dans ce répertoire.

rozcietrzewiacz
la source
4
Étrange ... la syntaxe avec dot ( du -sb --exclude=./relative/path/to/uploads) ne fonctionne pas pour moi. Cela fait:du -sb --exclude relative/path/to/uploads
Nux
4
@Nux probablement votre goût de du. Mine (OSX) n'en a même pas --exclude, il doit -I mask"Ignorer les fichiers et les répertoires correspondant au masque spécifié". Dans votre exemple de travail, vous omettez également le =, ce qui me fait penser que ce n’est que votre version d’ duêtre légèrement différent du.
phatskat
Oui, la version [OSX] [1] semble une version beaucoup plus simplifiée de [Linux du] [2]. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux
Que faire si je veux exclure plusieurs répertoires, par exemple ici, en excluant les répertoires junk_to_ignore et les répertoires de téléchargement?
Kiran K Telukunta
Pourquoi fonctionne-t-il avec un chemin relatif, mais pas un chemin absolu? Très étrange!
Nick
9

Pour exclure plusieurs répertoires, passez simplement l'indicateur --exclude.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Dave Neeley
la source
1
tu peux aussi utiliserdu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen
4

génial pour ignorer les systèmes de fichiers virtuels comme si

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

Si vous devez être sur macOS, installez GNU Coreutils avec la commande suivante.

brew install coreutils

La plupart des commandes installées par Coreutils sont préfixées par g, car elles ont un homonyme BSD préinstallé sur macOS. Ensuite, vous pouvez faire ce qui suit.

gdu --exclude=Microsoft /Library/Fonts/
Lei Zhao
la source