![동일한 장치에서 하위 디렉터리를 바인드 마운트하지 않고 디렉터리 크기를 계산합니다.](https://linux55.com/image/137780/%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%9E%A5%EC%B9%98%EC%97%90%EC%84%9C%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A5%BC%20%EB%B0%94%EC%9D%B8%EB%93%9C%20%EB%A7%88%EC%9A%B4%ED%8A%B8%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%ED%81%AC%EA%B8%B0%EB%A5%BC%20%EA%B3%84%EC%82%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
디렉터리와 모든 하위 디렉터리의 크기를 계산하고 싶습니다. 하지만 마운트 지점에서 마운트되는 일부 하위 디렉터리를 만들었습니다. (사용 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
각 파일에서 실행되는 것을 피하기 위해 이 작업이 수행되지 않는다고 가정합니다).