Usando --exclude com o comando du

67

Provavelmente isso é algo básico, mas não sou capaz de fazê-lo funcionar. Estou tentando usar o DU para obter um tamanho total de arquivos menos determinados diretórios. Preciso excluir um diretório específico chamado, uploadsmas nem todo diretório chamado uploads. Por exemplo, minha estrutura de arquivos se parece um pouco com isso:

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

Eu posso executar o seguinte comando:

du -ch --exclude=uploads* 

e me fornece o tamanho do arquivo menos todos os diretórios "uploads". No entanto, ao tentar excluir determinados diretórios (e todos os seus subdiretórios), falho. Eu tentei variações de:

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

mas parece que não consigo descobrir. Como excluo um diretório específico?

Vai
fonte
username: store$ du -ch --exclude=./uploadstrabalhou (com e sem o curinga) para mim, de dentro do diretório da loja. Você está executando esse comando exatamente e de dentro da pasta da loja? E tem que ser o caminho relativo (que encontra vê / imprime), não absoluto.
31411 Kevin

Respostas:

88

Você quase o encontrou :)

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

Não observe nenhum asterisco no final. O asterisco significa que todos os subdiretórios em "upload" devem ser omitidos - mas não os arquivos diretamente nesse diretório.

rozcietrzewiacz
fonte
4
Estranho ... sintaxe com dot ( du -sb --exclude=./relative/path/to/uploads) não funciona para mim. Isso acontece:du -sb --exclude relative/path/to/uploads
Nux 22/10
4
@ Nux provavelmente o seu sabor du. O Mine (OSX) nem sequer tem --exclude, mas precisa -I mask"Ignorar arquivos e diretórios correspondentes à máscara especificada". No seu exemplo de trabalho, você também omite o =, fazendo-me pensar ainda que é apenas a sua versão de duser um pouco mais duferoz.
phatskat
Sim, a versão [OSX] [1] parece ser uma versão bastante mais simplificada do [Linux du] [2]. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux
E se eu quiser excluir vários diretórios, por exemplo, aqui, excluindo os diretórios junk_to_ignore e fazendo upload de diretórios?
Kiran K Telukunta 10/09/16
Por que funciona com um caminho relativo, mas não com um caminho absoluto? Muito estranho!
24417 Nick
9

Para excluir vários diretórios, basta passar o sinalizador --exclude novamente.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Dave Neeley
fonte
11
você também pode usardu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen
4

incrível pular os sistemas de arquivos virtuais como esse

du -hsx --exclude=/{proc,sys,dev} /*
Ben Lutgens
fonte
1

Se você precisar estar no macOS, instale o GNU Coreutils com o seguinte comando.

brew install coreutils

A maioria dos comandos instalados pelo Coreutils é prefixada por g, pois eles têm um homônimo BSD pré-instalado no macOS. Então você pode fazer o seguinte.

gdu --exclude=Microsoft /Library/Fonts/
Lei Zhao
fonte