将 --exclude 与 du 命令一起使用

Wil*_*ill 93 command-line disk-usage

这可能是一些基本的东西,但我无法让它发挥作用。我正在尝试使用 DU 来获取减去某些目录的文件总大小。我需要排除一个名为的特定目录,uploads但不是每个名为uploads. 例如,我的文件结构看起来有点像这样:

/store
  /uploads
    /junk_to_ignore
    /more_junk_to_ignore
  /user_one
    /uploads
  /user_two
Run Code Online (Sandbox Code Playgroud)

我可以运行以下命令:

du -ch --exclude=uploads* 
Run Code Online (Sandbox Code Playgroud)

它给了我减去所有“上传”目录的文件大小。但是,在尝试排除某些目录(及其所有子目录)时我失败了。我尝试了以下变体:

du -ch --exclude=./uploads*
du -ch --exclude='/full/path/to/uploads/*'
Run Code Online (Sandbox Code Playgroud)

但似乎无法弄清楚。如何排除特定目录?

roz*_*acz 117

你几乎找到了:)

du -ch --exclude=./relative/path/to/uploads
Run Code Online (Sandbox Code Playgroud)

注意末尾没有星号。星号意味着“上传”下的所有子目录都应该被省略 - 但不是直接在该目录中的文件。

  • 奇怪的...语法带点 (`du -sb --exclude=./relative/path/to/uploads`) 对我不起作用。这样做:`du -sb --exclude relative/path/to/uploads` (6认同)
  • @Nux 可能是你对 `du` 的喜爱。我的 (OSX) 甚至没有 `--exclude`,而是有 `-I mask` 来“忽略与指定掩码匹配的文件和目录”。在你的工作示例中,你还省略了 `=`,让我进一步认为这只是你的 `du` 版本有点 `du`fferent。 (4认同)

小智 15

要排除多个目录,只需再次传递 --exclude 标志。

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`du -ch --exclude={relative/path/to/uploads,other/path/to/exclude}` (9认同)

小智 9

像这样跳过虚拟文件系统真是太棒了

du -hsx --exclude=/{proc,sys,dev} /*
Run Code Online (Sandbox Code Playgroud)


jed*_*edi 7

排除多个文件夹

du -ch --exclude={path/to/folder1,path/to_folder2/,...,}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

brew install coreutils
Run Code Online (Sandbox Code Playgroud)

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

gdu --exclude=Microsoft /Library/Fonts/
Run Code Online (Sandbox Code Playgroud)


小智 5

只需添加一个 Mac 示例

du -skI "Downloads" -I "Caches" -I "Logs" -I "OneDrive" .
Run Code Online (Sandbox Code Playgroud)

我没有看到使用路径的方法-I,所以例如,我还没有得到

du -skI "Downloads" -I "Caches" -I "Logs" -I "OneDrive" -I "Library/Application Support"  .
Run Code Online (Sandbox Code Playgroud)

上班。也许有可能,但我还没有得到它。