du 재귀 순서를 변경하는 방법

du 재귀 순서를 변경하는 방법

이전 결과를 정렬해 본 결과 다음 과 같은 결과에 대한 제안 du만 보았습니다 .sortdu | sort

이는 대부분의 목적에 적합하지만 하드 링크가 있는 여러 디렉토리를 나열할 때 특히 도움이 되지 않습니다. 예를 들어 증분 백업이 있습니다.

하드 링크를 두 번 계산 하면 du내용은 다음과 같습니다.

# du -hl --max-depth 1 /backup/saturn/ | sort -k 2
3.2G    /backup/saturn/
456M    /backup/saturn/2017-05-19
458M    /backup/saturn/2017-05-20
461M    /backup/saturn/2017-05-21
464M    /backup/saturn/2017-05-22
462M    /backup/saturn/2017-05-23
462M    /backup/saturn/2017-05-24
465M    /backup/saturn/2017-05-25

그러나 각 오래된 디렉터리는 다른 디렉터리 파일에 대한 많은 하드 링크를 공유하기 때문에 이러한 결과는 올바르지 않습니다. 이것은 증분 백업입니다.

그러나 더 의미 있는 결과는 다음과 같습니다.

# du -h --max-depth 1 /backup/saturn/ | sort -k 2
666M    /backup/saturn/
29M     /backup/saturn/2017-05-19
53M     /backup/saturn/2017-05-20
25M     /backup/saturn/2017-05-21
40M     /backup/saturn/2017-05-22
462M    /backup/saturn/2017-05-23
14M     /backup/saturn/2017-05-24
46M     /backup/saturn/2017-05-25

이것은 임의의 순서로 디렉토리를 평가하므로 한 날짜에서 다음 날짜까지 얼마나 많이 변경되었는지에 대한 의미 있는 정보를 거의 제공하지 않기 때문에 약간 우스꽝스럽습니다.

du그래서 저는 디렉터리가 평가되는 순서를 제어할 수 있는 방법을 찾고 있습니다 .

답변1

확장됨리기의 코멘트, 최신 버전에서는 du이 옵션을 사용하여 검사할 파일 목록을 읽을 수 있으므로 --files0-from다음을 수행할 수 있습니다.

printf "%s\0" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total

예를 들어:

$ du -hxd1 foo
111M    foo/2017-05-20
4.0K    foo/2017-05-19
4.0K    foo/2017-05-30
111M    foo

그리고:

$ printf "%s\0" foo/*/ | sort -z | du --files0-from=- -h --total
101M    foo/2017-05-19/
11M     foo/2017-05-20/
4.0K    foo/2017-05-30/
111M    total

find너무 많은 파일을 glob해야 하는 경우 를 사용할 수 있지만 printf약간 장황합니다.

$ find foo -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | du --files0-from=- -h --total
101M    foo/2017-05-19
11M     foo/2017-05-20
4.0K    foo/2017-05-30
111M    total

관련 정보