내부 하드 링크가 없다고 가정하면 (즉, 하드 링크가 2 개 이상인 모든 파일이 트리 외부에서 링크 됨) 다음을 수행 할 수 있습니다.
find . -links -2 -print0 | du -c --files0-from=-
편집 여기 주석에서 스케치 한 내용이 적용됩니다. 없이 du
; 눈치 채기 위해 @StephaneChazelas에 대한 조언 du
은 필요하지 않습니다. 끝에 설명.
( find . -type d -printf '%k + ' ; \
find . \! -type d -printf '%n\t%i\t%k\n' | \
sort | uniq -c | \
awk '$1 >= $2 { print $4 " +\\" }' ; \
echo 0 ) | bc
우리가하는 일은 모든 관련 파일의 디스크 사용량 (KB)을 더하기 기호로 구분하여 문자열을 만드는 것입니다. 그런 다음에 큰 추가 내용을 제공 bc
합니다.
첫 번째 find
호출은 디렉토리에 대해 수행합니다.
두 번째 find
는 링크 수, inode 및 디스크 사용량을 인쇄합니다. sort | uniq -c
(트리의 모양 수, 링크 수, inode, 디스크 사용량) 목록을 얻기 위해 해당 목록을 전달합니다 .
이 목록을으로 전달 awk
하고 첫 번째 필드 (#)가 두 번째 (하드 링크 #)보다 크거나 같으면 트리 외부에서이 파일에 대한 링크가 없다는 의미입니다. 더하기 부호와 백 슬래시가 첨부 된 디스크 사용량).
마지막으로 우리는 a를 출력 0
하므로 수식은 구문 상 정확하고 ( +
그렇지 않으면 en ) 전달합니다 bc
. 휴
(그러나 충분한 대답을 제공한다면 더 간단한 첫 번째 방법을 사용합니다.)
du
는-l
/--count-links
옵션 을 사용하지 않으면 하드 링크 된 경우에도 파일 크기를 한 번만 계산합니다 .du
이 옵션을 사용하거나 사용하지 않고 전체 트리에서 두 번 실행 하며 크기의 차이는 모든 디렉토리에서 저장 한 공간의 양이어야합니다.