디렉터리 분기 내 특정 파일의 전체 크기 찾기

디렉터리 분기 내 특정 파일의 전체 크기 찾기

예를 들어 이라는 이미지 저장 디렉터리가 있고 ./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

기본적으로 다음 두 가지가 필요합니다.

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

답변4

지금까지 제공된 답변은 find에서 du로 전달된 파일 목록이 너무 길어서 find가 자동으로 목록을 여러 덩어리로 분할하여 total.

grep total(로캘!) 수동으로 요약하거나 다른 명령을 사용할 수 있습니다 . AFAIK 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=-

관련 정보