在du命令中使用--exclude


66

这可能是基本的东西,但我无法使其工作。我正在尝试使用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在store目录中为我工作(使用和不使用通配符)。您是否在商店文件夹中准确地运行该命令?而且它必须是相对路径(可以看到/打印),而不是绝对路径。
凯文

Answers:


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 2014年

是的[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并上传目录,该怎么办?
Kiran K Telukunta '16

为什么使用相对路径而不是绝对路径?很奇怪!
尼克

8

要排除多个目录,只需再次传递--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}
Hajo Thelen


1

如果必须使用macOS,请使用以下命令安装GNU Coreutils。

brew install coreutils

Coreutils安装的大多数命令都以前缀g,因为它们在macOS上已预先安装了BSD命名。然后,您可以执行以下操作。

gdu --exclude=Microsoft /Library/Fonts/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.