디렉토리 분기에 있는 특정 파일의 전체 크기 찾기

디렉토리 분기에 있는 특정 파일의 전체 크기 찾기

./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

먼저 두 가지가 필요합니다.

  • option -c, du총계를 생성하도록 지시합니다.
  • 누구나 **(활성화 지침) 또는 find() 또는 하위 디렉터리를 탐색합니다.
du -ch -- **/*.jpg | tail -n 1

답변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=-

관련 정보