Использование --exclude с командой du


67

Это, наверное, что-то базовое, но я не могу заставить его работать. Я пытаюсь использовать DU, чтобы получить общий размер файлов минус определенные каталоги. Мне нужно исключить один конкретный каталог с именем, uploadsно не каждый каталог называется uploads. Например, моя файловая структура выглядит примерно так:

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

Я могу запустить следующую команду:

du -ch --exclude=uploads* 

и это дает мне размер файла минус все каталоги "загрузки". Однако при попытке исключить определенные каталоги (и все его подкаталоги) я терплю неудачу. Я пробовал варианты:

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

но не могу понять это. Как исключить конкретный каталог?


username: store$ du -ch --exclude=./uploadsработал (с и без подстановочного знака) для меня, из каталога магазина. Вы выполняете эту команду точно и из папки магазина? И это должен быть относительный путь (который находит, видит / печатает), а не абсолютный.
Кевин

Ответы:


88

Вы почти нашли это :)

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

Обратите внимание, нет звездочки в конце. Звездочка означает, что все подкаталоги в «upload» должны быть пропущены, но не файлы непосредственно в этом каталоге.


4
Странно ... синтаксис с точкой ( du -sb --exclude=./relative/path/to/uploads) не работает для меня. Это делает:du -sb --exclude relative/path/to/uploads
Nux

4
@Nux, наверное, твой вкус du. Мой (OSX) даже не имеет --exclude, вместо этого он должен -I mask«игнорировать файлы и каталоги, соответствующие указанной маске». В вашем рабочем примере вы также опускаете =, заставляя меня далее думать, что это просто ваша версия duбыть немного duдругой.
phatskat

Да, версия [OSX] [1] выглядит более упрощенной версией [Linux du] [2]. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux

Что если я хочу исключить несколько каталогов, например, здесь, за исключением каталогов junk_to_ignore и загрузки каталогов?
Киран К Телукунта

Почему это работает с относительным путем, но не абсолютным путем? Очень странно!
Ник

9

Чтобы исключить несколько каталогов, просто передайте флаг --exclude снова.

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

1
Вы также можете использоватьdu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Хаджо Телен

4

здорово пропустить виртуальные файловые системы, как это так

du -hsx --exclude=/{proc,sys,dev} /*

1

Если вам нужно быть в macOS, вы устанавливаете GNU Coreutils с помощью следующей команды.

brew install coreutils

Большинство команд, установленных Coreutils, начинаются с префикса g, поскольку в MacOS предварительно установлен тезка BSD. Тогда вы можете сделать следующее.

gdu --exclude=Microsoft /Library/Fonts/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.