du 명령을 사용하여 모든 파일과 하위 디렉터리에 있는 모든 파일의 크기를 얻는 방법입니다.
모든 파일(및 하위 디렉터리의 파일)의 크기를 가져오기 위해 다음 명령을 시도하고 있습니다.
find . -type f | du -a
그러나 이것은 또한 폴더 크기를 인쇄합니다. 하위 디렉터리에 있는 모든 파일과 파일의 크기 목록을 얻는 방법은 무엇입니까? 나는 또한 이것을 시도했지만 exec flag
결과 find
를 du
.
운영 체제는 ksh 쉘이 포함된 AIX 6.1입니다.
답변1
저는 보통 이 -exec
유틸리티를 사용합니다. 이와 같이:
find . -type f -exec du -a {} +
나는 bash와 ksh에서 GNU find를 사용해 보았습니다. 나는 AIX를 사용해 본 적이 없지만 귀하의 find 버전에 몇 가지 구문이 있을 것이라고 확신합니다 -exec
.
다음 코드 조각은 목록을 가장 큰 것부터 정렬합니다.
find . -type f -exec du -a {} + | sort -n -r | less
답변2
GNU 유틸리티가 있다면 시도해 보세요.
find . -type f -print0 | du --files0-from=-
답변3
나는 일반적으로 다음을 사용합니다.
find . -type f -print0 | xargs -r0 du -a
Xargs는 일반적으로 인수가 전달되지 않은 경우에도 이 명령을 호출 xargs du </dev/null
하지만 xargs -r du </dev/null
du는 호출되지 않습니다. 이 -0
매개변수는 줄 바꿈으로 끝나는 문자열 대신 Null로 끝나는 문자열을 찾습니다.
그런 다음 보통 | awk '{sum+=$1} END {print sum}'
끝에 합계를 추가합니다.
답변4
완전성을 기하기 위해 허용되는 답변은 질문에서 요청한 것과 정확히 일치 du
하지만 du
디스크 사용량(파일이 저장된 파티션의 블록 크기에 따라 다름)이 인쇄된다는 점에 유의하세요. 파일 크기(파일 크기에 관계 없음) 크기는 저장되는 위치에 관계없이 일정합니다. 또 다른 접근 방식은 디스크 사용량 대신 파일의 바이트 수를 인쇄하는 것입니다
find . -type f -printf '%s %f\n'
(또는 find . -type f -printf '%s %f\n' | sort -k2
이름별로 정렬).