Używanie opcji --exclude z poleceniem du

66

Jest to prawdopodobnie coś podstawowego, ale nie jestem w stanie sprawić, by działało. Próbuję użyć DU, aby uzyskać całkowity rozmiar plików minus niektóre katalogi. Muszę wykluczyć jeden konkretny katalog o nazwie, uploadsale nie każdy katalog o nazwie uploads. Na przykład moja struktura plików wygląda trochę tak:

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

Mogę uruchomić następujące polecenie:

du -ch --exclude=uploads* 

i daje mi rozmiar pliku minus wszystkie katalogi „upload”. Jednak próbując wykluczyć niektóre katalogi (i wszystkie jego podkatalogi) nie udaje mi się. Próbowałem odmian:

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

ale nie mogę tego rozgryźć. Jak wykluczyć określony katalog?

Będzie
źródło
username: store$ du -ch --exclude=./uploadspracował dla mnie (z i bez symbolu wieloznacznego) z katalogu sklepu. Czy uruchamiasz dokładnie to polecenie z poziomu folderu sklepu? I musi to być ścieżka względna (która znajduje widzi / wydruki), a nie absolutna.
Kevin

Odpowiedzi:

88

Prawie go znalazłeś :)

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

Zauważ, że na końcu nie ma gwiazdki. Gwiazdka oznacza, że ​​wszystkie podkatalogi w „upload” powinny zostać pominięte - ale nie pliki bezpośrednio w tym katalogu.

rozcietrzewiacz
źródło
4
Dziwna ... składnia z kropką ( du -sb --exclude=./relative/path/to/uploads) nie działa dla mnie. To robi:du -sb --exclude relative/path/to/uploads
Nux
4
@Nux prawdopodobnie twój gust du. Mój (OSX) nawet nie ma --exclude, zamiast tego musi -I mask„Ignorować pliki i katalogi pasujące do określonej maski”. W swoim roboczym przykładzie pomijasz również =, co sprawia, że ​​dalej myślę, że to tylko twoja wersja dubycia nieco duróżnym.
phatskat
Tak Wersja [OSX] [1] wydaje się być znacznie uproszczoną wersją [Linux du] [2]. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux
Co jeśli chcę wykluczyć wiele katalogów, na przykład tutaj z wyłączeniem katalogów junk_to_ignore i przesyłając katalogi?
Kiran K Telukunta
Dlaczego działa ze ścieżką względną, ale nie ścieżką bezwzględną? Bardzo dziwne!
Nick
8

Aby wykluczyć wiele katalogów, ponownie przekaż flagę --exclude.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Dave Neeley
źródło
1
możesz również użyćdu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen
4

wspaniale jest pominąć wirtualne systemy plików

du -hsx --exclude=/{proc,sys,dev} /*
Ben Lutgens
źródło
1

Jeśli musisz mieć system macOS, instalujesz GNU Coreutils za pomocą następującego polecenia.

brew install coreutils

Większość poleceń zainstalowanych przez Coreutils ma prefiks g, ponieważ mają one wstępnie zainstalowany w systemie macOS imiennik BSD. Następnie możesz wykonać następujące czynności.

gdu --exclude=Microsoft /Library/Fonts/
Lei Zhao
źródło