Calculando o tamanho do diretório sem subdiretórios ligados à montagem do mesmo dispositivo

0

Eu quero calcular um tamanho de diretório com todos os seus subdiretórios. Mas eu fiz alguns dos subdiretórios para montar a partir de um ponto de montagem. (usando mount -B/--bind )

quando eu uso du -hks , o tamanho retornado inclui os diretórios montados. Existe uma maneira de eliminar o tamanho do resultado?

Editar: Os diretórios que eu calculo tamanho estão todos no mesmo local. Há um diretório principal com conteúdo compartilhado para todos os outros diretórios (contém todos os pontos de montagem) e os diretórios têm alguns arquivos individuais. O objetivo é calcular o tamanho dos arquivos individuais.

    
por Ali Shadloo 30.07.2018 / 12:17

2 respostas

0

du -x (pelo menos GNU e busybox du ) é enganado pelos bind-mounts do Linux porque os arquivos têm o mesmo device-id, então você precisa remover manualmente os mount-points. Com o GNU du :

du -xhs --exclude=./bind/mount/point

Como alternativa, você pode usar o GNU find para localizar os arquivos e imprimir o uso do disco, chamando o comando mountpoint para saber quais diretórios devem ser removidos (que são montagens de ligação). Em seguida, use awk para fazer as somas (contando apenas hardlinks uma vez, como du ):

find . -xdev ! -name . -type d -exec mountpoint -q {} \; -prune -o \
       -printf '%i %b\n' |
  awk '!seen[$1]++ {s+=$2}
       END{printf "%.17g\n", s * 512}' |
  numfmt --to=iec

Isso é bastante ineficiente, já que precisa executar o comando mountpoint para cada diretório (note que também é possível montar arquivos não-diretórios de montagem de bind, estamos assumindo que não é feito para evitar a execução de mountpoint on cada arquivo).

    
por 30.07.2018 / 13:23
0

homem du:

   -x, --one-file-system
          skip directories on different file systems
    
por 30.07.2018 / 12:18