./photos/john_doe
예 를 들어, 많은 특정 파일이 있는 여러 하위 디렉터리가 있는 이미지 저장 디렉터리 (예: *.jpg
)가 있다고 가정합니다. 지점에서 이러한 파일의 다이제스트 크기를 계산하는 방법은 무엇입니까 john_doe
?
시도했지만 du -hs ./photos/john_doe/*/*.jpg
단일 파일만 표시됩니다. 또한 이는 디렉토리의 첫 번째 중첩 수준 john_doe
(예: ) 만 추적 john_doe/june/
하고 건너뜁니다 john_doe/june/outrageous/
.
그렇다면 전체 분기를 반복하여 특정 파일의 크기를 합산하려면 어떻게 해야 할까요?
답변1
find ./photos/john_doe -type f -name '*.jpg' -exec du -ch {} + | grep total$
파일 목록이 길어 여러 호출이 필요한 경우 du
여러 합계가 보고되고 합산됩니다.
답변2
du -ch public_html/images/*.jpg | grep total
20M total
.jpg
이 디렉터리에 있는 파일의 총 사용량을 제공합니다 .
find
여러 디렉토리를 처리하려면 어떤 방식으로든 결합 해야 할 수도 있습니다 .
당신은 찾을 수 있습니다du 명령 예유용함(또한 포함됨 find
)
답변3
답변4
지금까지 제공된 답변은 find에서 du로 전달된 파일 목록이 너무 길어서 find가 자동으로 목록을 청크로 분할하여 total
.
수동으로 요약 하거나 grep total
(로케일!) 다른 명령을 사용할 수 있습니다. 내가 아는 한, find로 찾은 모든 파일의 총 수(KB)를 얻는 방법은 두 가지뿐입니다.
find . -type f -iname '*.jpg' -print0 | xargs -r0 du -a| awk '{sum+=$1} END {print sum}'
설명
find . -type f -iname '*.jpg' -print0
: 대/소문자(예: *.jpg, *.JPG, *.Jpg...)에 관계없이 확장자가 jpg인 모든 파일을 찾아서 출력합니다(null로 종료됨).
xargs -r0 du -a
: -r: Xargs는 인수가 전달되지 않은 경우에도 명령을 호출하며 -r은 이를 방지합니다. -0은 null로 끝나는 문자열(개행 아님)을 나타냅니다.
awk '{sum+=$1} END {print sum}'
: 이전 명령으로 출력된 파일 크기를 요약합니다.
참고로 또 다른 방법은
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-