Verwenden von --exclude mit dem Befehl du

67

Dies ist wahrscheinlich etwas Grundlegendes, aber ich bin nicht in der Lage, es zum Laufen zu bringen. Ich versuche, DU zu verwenden, um eine Gesamtgröße von Dateien abzüglich bestimmter Verzeichnisse zu erhalten. Ich muss ein bestimmtes Verzeichnis ausschließen, das aufgerufen wird, uploadsaber nicht jedes Verzeichnis, das aufgerufen wird uploads. Zum Beispiel sieht meine Dateistruktur so aus:

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

Ich kann den folgenden Befehl ausführen:

du -ch --exclude=uploads* 

und es gibt mir die Dateigröße abzüglich aller "Uploads" -Verzeichnisse. Beim Versuch, bestimmte Verzeichnisse (und alle ihre Unterverzeichnisse) auszuschließen, scheitere ich jedoch. Ich habe versucht Variationen von:

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

Aber ich kann es nicht herausfinden. Wie schließe ich ein bestimmtes Verzeichnis aus?

Wille
quelle
username: store$ du -ch --exclude=./uploadsarbeitete (mit und ohne Platzhalter) für mich innerhalb des Geschäftsverzeichnisses. Führen Sie diesen Befehl genau und aus dem Speicherordner heraus aus? Und es muss der relative Pfad sein (der sieht / druckt), nicht absolut.
Kevin

Antworten:

88

Du hast es fast gefunden :)

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

Beachten Sie am Ende kein Sternchen. Das Sternchen bedeutet, dass alle Unterverzeichnisse unter "Upload" weggelassen werden sollten, nicht jedoch die Dateien, die sich direkt in diesem Verzeichnis befinden.

rozcietrzewiacz
quelle
4
Seltsam ... Syntax mit dot ( du -sb --exclude=./relative/path/to/uploads) funktioniert bei mir nicht. Dies macht:du -sb --exclude relative/path/to/uploads
Nux
4
@Nux wahrscheinlich dein Geschmack von du. Meins (OSX) hat nicht einmal --exclude, sondern muss -I mask"Dateien und Verzeichnisse ignorieren, die mit der angegebenen Maske übereinstimmen". In deinem Arbeitsbeispiel lässt du auch das weg =, was mich weiter denken lässt, dass es nur deine Version duist, etwas duanders zu sein.
Phatskat
Ja, die Version [OSX] [1] scheint eine wesentlich vereinfachte Version von [Linux du] [2] zu sein. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux
Was ist, wenn ich zum Beispiel hier mehrere Verzeichnisse ausschließen möchte, ohne die Verzeichnisse junk_to_ignore und die Verzeichnisse hochzuladen?
Kiran K Telukunta
Warum funktioniert es mit einem relativen Pfad, aber nicht mit einem absoluten Pfad? Sehr komisch!
Nick
9

Übergeben Sie zum Ausschließen mehrerer Verzeichnisse erneut das Flag --exclude.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Dave Neeley
quelle
1
Sie können auch verwendendu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen
4

genial, die virtuellen Dateisysteme so zu überspringen

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

Wenn Sie unter macOS arbeiten müssen, installieren Sie GNU Coreutils mit dem folgenden Befehl.

brew install coreutils

Die meisten von Coreutils installierten Befehle ghaben ein Präfix , da auf macOS ein BSD-Namensvetter vorinstalliert ist. Dann können Sie Folgendes tun.

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