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?


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.


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

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} /*

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/
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.