du는 심볼릭 링크를 건너뜁니다.

du는 심볼릭 링크를 건너뜁니다.

내 시스템의 기본 동작이 du올바른 기본 동작이 아닙니다.

ls폴더를 보면 다음과 /data같은 내용이 표시됩니다(중요하지 않은 항목 제거).

ghs
ghsb -> ghs
hope
rssf -> roper
roper

각 폴더에는 숫자로 명명된 폴더 세트가 있습니다. 14다음을 사용하여 이름이 지정된 모든 폴더의 전체 크기를 얻고 싶습니다 .

du -s /data/*/14

나는 보았다...

161176 /data/ghs/14
161176 /data/ghsb/14
8 /data/hope/14
681564 /data/rssf/14
681564 /data/roper/14

내가 원하는 것은:

161176 /data/ghs/14
8 /data/hope/14
681564 /data/roper/14

나는 심볼릭 링크를 보고 싶지 않습니다. -L,, -D등을 시도해 보았습니다 -S. 나는 항상 심볼릭 링크를 얻습니다. 제거할 수 있는 방법이 있나요?

답변1

이는 du기호 링크를 확인하는 것이 아니라 기호 링크를 확인하는 것입니다. 이것이 당신의 껍질입니다.

*셸 구입니다. 명령이 실행되기 전에 셸에 의해 확장됩니다. 따라서 실제로 실행 중인 명령은 다음과 같습니다.

du -s /data/ghs/14 /data/ghsb/14 /data/hope/14 /data/rssf/14 /data/roper/14

쉘이 bash라면 심볼릭 링크를 확장하지 말라고 지시할 방법이 없습니다. 그러나 find대신 (GNU 버전)을 사용할 수 있습니다 .

find /data -mindepth 2 -maxdepth 2 -type d -name 14 -exec du -s {} +

답변2

du건너뛰기 심볼릭 링크를 만듭니다 .

du링크를 추적하지 않을 만큼 똑똑하지 않습니다. 기본적으로 find기호 링크는 건너뜁니다 . 따라서 find, 및 올바른 흑마법 주문 du사이에 부정한 동맹을 만드는 것은 다음과 같습니다.awk

find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print total}'

생산:

145070492

출력을 사람이 읽을 수 있도록 강제합니다.

find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print (total / 1024 / 1024) "MB"}'

생산:

138.35MB

여기서 무슨 일이 일어나고 있나요?

/home/somedirectory/      directory to search.
-exec du -s +             run du -s over the results, producing bytes
awk '...'                 get the first token of every line and add them up,
                          dividing by 1024 twice to produce MB

답변3

이 플래그를 사용하세요 -L.

매뉴얼 페이지에서:

-L, --dereference
              dereference all symbolic links

그런 다음 du는 기호 여부에 관계없이 크기를 계산합니다.

답변4

du -P

-P, --no-dereference는 심볼릭 링크를 따르지 않습니다(기본값)

관련 정보