"."로 시작하는 분기를 제외하고 디렉토리 트리의 디스크 사용량을 얻고 싶고 결국 ssh를 통해 실행하고 싶기 때문에 파이프를 사용하지 않는 것이 좋습니다. 다음 명령을 실행하면 모든 디렉터리 목록이 표시됩니다.
> /bin/find . \( -name .[^.]\* -prune \) -o \( -type d -exec /bin/echo -sh {} + \)
-sh ./dir-1 ./dir-2 ./dir-3 [...]
du를 단독으로 실행하면 예상되는 결과를 얻습니다.
> /bin/du -sh ./dir-1 ./dir-2 ./dir3 [...]
11M ./dir-1
254K ./dir-2
15M ./dir-3
[...]
두 개를 결합하면 전체 행만 얻습니다.
> /bin/find . \( -name .[^.]\* -prune \) -o \( -type d -exec /bin/du -sh {} + \)
1.4G .
그런데 저는 Oracle Linux Server 버전 7.9와 GNU bash, 버전 4.2.46(2)-릴리스(x86_64-redhat-linux-gnu)를 실행하고 있습니다.
답변1
요약할 때 du
디렉터리는 한 번만 계산됩니다.
du -sh . somedir
점유되어 있기 .
때문에 표시됩니다 . 순서가 중요하므로somedir
.
du -sh somedir .
somedir
과 동시에 표시되며 계산 .
되지 않습니다 .somedir
.
귀하의 find
명령은 결국 을 포함하게 되며 .
, 이것이 먼저 나오므로 이것이 표시됩니다. 최소 깊이를 지정하면 이를 방지할 수 있습니다. 그러면 현재 디렉터리 아래에 있는 모든 디렉터리의 전체 내용이 표시됩니다.
그게 당신이 원하는 거라면, 그럼요
du -sh */
을 사용하지 않고도 동일한 결과를 얻을 수 있습니다 find
.
자세한 디렉터리별 출력을 원하는 경우 find
디렉터리에 깊이 우선 나열을 지시해야 합니다. -prune
이는 작동하지 않지만 경로 필터링은 다음과 같습니다.
find . -mindepth 1 -depth -type d \! -path '*/.*' -exec du -sh {} +
(숨겨진 디렉터리의 크기는 여전히 숨겨지지 않은 상위 디렉터리의 크기에 포함됩니다.)
du
이를 지원하는 경우 --exclude
이를 사용하여 동일한 효과를 얻을 수 있습니다.
du -h --exclude '*/.*' ./