du -b가 stat와 다른 결과를 표시하는 이유는 무엇입니까?

du -b가 stat와 다른 결과를 표시하는 이유는 무엇입니까?

최근에 다음과 같은 문제가 발생했습니다.

find /tmp/tmp33hn25wv -type f -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'
10420224

du -bs /tmp/tmp33hn25wv
12198004    /tmp/tmp33hn25wv

결과는 지속적으로 다릅니다. 모든 파일은 블록 크기 바이트의 배수로 기록됩니다.

어디에서추가 바이트를 찾으셨나요? 파일 시스템이 파일의 내용을 저장하는 데 어느 정도 공간이 필요할 수 있다는 것을 이해하지만 해당 -b옵션이 du파일 시스템에서 사용하는 크기가 아닌 "명백한" 크기를 계산해야 함을 의미하기를 바랐습니다.

답변1

du디렉토리의 크기를 포함합니다. 기준 -type d에 추가하면 find원하는 결과를 얻을 수 있습니다(표준 파일만 포함된 디렉토리 트리에서 수행).

find /tmp/tmp33hn25wv \( -type f -o -type d \) -exec stat --format='%s' {} + |\
    awk '{s+=$1} END {print s}'

그러나 공간을 차지하는 다른 파일 형식이 있을 수 있으므로 형식 확인을 완전히 생략해 보세요.

find /tmp/tmp33hn25wv -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'

관련 정보