동일한 장치에서 하위 디렉터리를 바인드 마운트하지 않고 디렉터리 크기를 계산합니다.

동일한 장치에서 하위 디렉터리를 바인드 마운트하지 않고 디렉터리 크기를 계산합니다.

디렉터리와 모든 하위 디렉터리의 크기를 계산하고 싶습니다. 하지만 마운트 지점에서 마운트되는 일부 하위 디렉터리를 만들었습니다. (사용 mount -B/--bind)

du -hks반환된 크기를 사용하면 마운트된 디렉터리가 포함됩니다. 결과에서 크기를 제거하는 방법이 있습니까?

편집하다: 크기를 계산하는 디렉터리는 모두 같은 위치에 있습니다. 다른 모든 디렉터리(모든 마운트 지점 포함)의 공유 콘텐츠를 포함하는 기본 디렉터리가 있으며, 디렉터리에는 별도의 파일이 있습니다. 목표는 단일 파일의 크기를 계산하는 것입니다.

답변1

만두:

   -x, --one-file-system
          skip directories on different file systems

답변2

du -x(적어도 GNU 및 busybox du) 파일의 장치 ID가 동일하므로 Linux 바인드 마운트에 속기 때문에 마운트 지점을 수동으로 정리해야 합니다. GNU 사용 du:

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

또는 GNU를 사용하여 find파일을 찾고 디스크 사용량을 인쇄하고 명령을 호출하여 mountpoint정리할 디렉터리를 알 수 있습니다(이 디렉터리는 바인드 마운트입니다). 그런 다음 이를 사용하여 awk합계를 계산합니다( 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

그러나 이것은 mountpoint각 디렉터리에 대해 명령을 실행해야 하기 때문에 매우 비효율적입니다(디렉터리가 아닌 파일을 바인딩하는 것도 가능하며 mountpoint각 파일에서 실행되는 것을 피하기 위해 이 작업이 수행되지 않는다고 가정합니다).

관련 정보