내 시스템의 기본 동작이 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는 심볼릭 링크를 따르지 않습니다(기본값)