총 크기가 300GB인 약 100만 개의 폴더에 대한 경로가 있습니다. 명령 을 실행하면 du -sh *
제목에 언급된 오류가 발생합니다. 이 명령을 어떻게 결합할 수 있습니까 ? xargs
아니면 xargs
문제가 해결됩니까? 그러나 동일한 경로에서 20GB보다 큰 폴더를 찾으려면 여전히 별도의 명령이 필요합니다. 이 두 명령을 사용하는 데 도움이 필요합니다.
경로 예:/data/dataold/exports/
출력은 다음과 같아야 합니다. 아래에서 말하는 내용은 이전 줄에서 지정한 홈 경로 아래의 파일 및 폴더 이름으로 생각할 수 있습니다.
4.0K xyz.sh 12K asdasda.txt 10G QWERT 1G ASDFGH
감사합니다.
답변1
한 가지 옵션은 을 사용하는 것이지만 find
아래 표시된 다른 솔루션 중 하나를 사용하는 것이 좋습니다.
find /data/dataold/exports -mindepth 1 -maxdepth 1 -exec du -sh {} \;
/data/dataold/exports
하위 디렉터리가 포함되어 있다고 가정
foo
bar
baz
(어쩌면 그 이상) 실행될 것입니다.
du -sh /data/dataold/exports/foo
du -sh /data/dataold/exports/bar
du -sh /data/dataold/exports/baz
등.
옵션은 에 대한 명령 -mindepth
실행을 방지하고 하위 디렉토리의 하위 디렉토리에서 for와 같은 명령 실행을 방지합니다 .du
/data/dataold/exports
-maxdepth
/data/dataold/exports/foo/something
제안대로카스' 댓글을 사용하면 됩니다.
find /data/dataold/exports -mindepth 1 -maxdepth 1 -exec du -sh {} \+
대신 ... -exec du -sh {} \;
, 귀하의 버전이 find
이 기능을 지원하는 경우. +
대신 을 사용하면 각 파일/디렉토리에 대해 한 번이 아니라 ;
버퍼가 가득 찰 때마다(약 2MB) Linux 인수 버퍼가 한 번 실행됩니다 . 전자는find
du
많은서둘러요.
인용하다스티븐 차제라스' 참고: "이러한 최상위 디렉터리 사이에 하드 링크가 있는 경우 여러 개의 독립적인 호출 du
(예: 데이터 중복 제거 수행)을 호출합니다."find -exec
du
du
GNU를 사용하면 다음 옵션을 사용하여 표시할 깊이를 제한 할 수 있습니다 .-d
--max-depth=N
du -h -d 1 /data/dataold/exports
이는 모든 하위 디렉터리를 계산하지만 출력을 시작점 아래의 깊이 1로 제한하므로 위에 표시된 예에서는 전체 크기를 인쇄해야 합니다.
/data/dataold/exports/foo
/data/dataold/exports/bar
/data/dataold/exports/baz
등등 그리고
/data/dataold/exports
du
두 번째 솔루션(사용 가능한 경우)이 선호되어야 합니다. 왜냐하면 매개변수 버퍼를 채우기 위해 각 하위 디렉터리(의 경우 ) 또는 각 하위 디렉터리 집합에 대해 새 프로세스를 시작할 필요가 없기 때문입니다 -exec ... \;
(의 경우 -exec ... \+
).
귀하의 버전이 사용할 수 있는 옵션을 du
지원하지 않는 경우-d
du -h /data/dataold/exports
그리고 출력을 필터링하여 하위 디렉터리의 첫 번째 수준 아래에 있는 모든 항목을 제거합니다.
수치 비교를 통해 출력을 필터링하려면 이 옵션을 생략하는 것이 좋습니다 -h
. 필터링을 테스트할 때 느린 파일 시스템 액세스를 기다리지 않으려면 출력을 파일로 리디렉션하는 것이 좋습니다.
du -d 1 /data/dataold/exports > outputfile
또는
du -d 1 /data/dataold/exports 2>errors | tee outputfile
다음 내용을 처리합니다 outputfile
.
예:
awk '$1 > 20e9` outputfile
du
옵션을 지원하지 않으면 다음 -d
과 같은 것을 사용할 수 있습니다
du /data/dataold/exports > outputfile
awk '$1 > 20e9 && $1 != /\/.*\/.*\/.*\/.*\/.*/` outputfile
이렇게 하면 첫 번째 필드의 숫자가 20 * 10^9보다 크고 두 번째 필드의 값에 슬래시가 5개(또는 그 이상) 포함되지 않은 모든 행이 인쇄됩니다. 두 번째 조건의 슬래시 수는 시작 디렉토리에 따라 사용자 정의되며 /data/dataold/exports
eg는 인쇄되지만 /data/dataold/exports/foo
eg는 인쇄되지 않습니다 /data/dataold/exports/foo/bar
.
답변2
요약하지 말고 du
작업이 완료되도록 하십시오. sort
사용자 주문별로 적용한 -h
다음 특정 크기로 제한합니다.
du -h /data/dataold/exports/ | sort -h
가장 큰 것부터 가장 작은 것까지 -r
역순 으로 파일을 나열하는 데 사용됩니다 .sort
크기를 선택하려면 다음과 awk
같은 간단한 방법을 사용할 수 있습니다.
du -h /data/dataold/exports/ | awk -F'G' '$1~/^[0-9]+$/ && $1>=20' | sort -h
즉, G
GB 크기 출력에서 필드 구분 기호로 사용하고 필드에 숫자만 있는지 확인한 다음(G 구분 기호와 잘못된 일치를 제외하기 위해) 20보다 큰 숫자만 선택합니다. 여기서 정렬하는 것은 선택 사항입니다.