du -x ainda examina sistemas de arquivos montados ao usar curingas

5

Se eu tentar

du -s -h -x /*

ele tentará examinar todos os sistemas de arquivos (reais e pseudo) diretamente sob /, por exemplo, / dev, / proc, / sys, / run e / home (/ home está em uma partição extra).

Eu acho que vem da expansão do shell *, dando uma lista de parâmetros que explicitamente inclui esses pontos de montagem.

Existe uma maneira de fazer du não examinar sistemas de arquivos montados, mesmo quando os pontos de montagem estão contidos na lista de parâmetros?

Eu realmente não quero digitar todos os subdiretórios de / apenas para evitar que eles estejam na lista de parâmetros.

    
por Markus N. 31.08.2013 / 01:45

2 respostas

4

Você ainda pode filtrar usando mountpoint (se disponível no seu sistema):

for a in /*; do mountpoint -q -- "$a" || du -s -h -x "$a"; done

Se mountpoint não estiver disponível, mas stat for (enquanto stat ainda não for POSIX, pode ser mais comum), você terá que comparar a stat manualmente:

rootdevice="$(stat -c %D /)"
for a in /*; do [ "$rootdevice" = "$(stat -c %D -- "$a")" ] && du -s -h -x "$a"; done
    
por 31.08.2013 / 11:48
0

Eu acho que você está certo. Você está realmente dizendo du /dev , du /sys , du /usr , du /home então a opção "-x" não tem sentido.

Por que você não passa por cima disso? Por exemplo. find / -maxdepth 1 | egrep -v home|media listará todos os dirs, exceto home e media. Então você pode enviar a saída para um loop while para du it.

find / -maxdepth 1 | egrep -v home|media | while read f; do
  du -s -h -x "$f"; 
done
    
por 31.08.2013 / 11:19