포함 및 제외 패턴이 있는 특정 폴더/파일의 총 크기

포함 및 제외 패턴이 있는 특정 폴더/파일의 총 크기

디스크에 있는 특정 폴더와 파일의 전체 크기를 제공할 수 있는 도구를 찾고 있습니다. 순차적으로 처리되는 여러 필터 패턴을 기반으로 프로젝트와 모든 하위 항목(그 안의 폴더 및 파일)을 명시적으로 포함하거나 제외할 수 있어야 합니다.

예를 들어 필터 패턴은 다음을 수행할 수 있어야 합니다.

  • /bar(및 모든 하위 키)와 일치하지만 /foo/bar는 일치하지 않습니다.
  • /bar 및 /baz를 제외하지 않고 /foo(및 모든 하위 키)만 포함합니다.
  • 무제한의 레벨에서 작업하세요. 예를 들어 /foo에서 .jpg를 제외하려면 /foo/cat.jpg 및 /foo/bar/dog.jpg를 제외해야 합니다.

나는 이것을 시도했지만 du위의 모든 것을 할 수 없었습니다.

답변1

도구를 원하는 것 같군요

  1. 파일 경로의 패턴을 기반으로 파일 선택
  2. 크기 및/또는 디스크 사용량을 검색하고 요약합니다.

그렇다면 질문이 있습니다. 일부 파일 경로가 동일한 파일을 참조하는 경우(함께 하드 링크됨) 어떻게 될까요? 동일한 파일이므로 크기를 한 번만 계산하시겠습니까?

파일을 찾으려면 주요 옵션은 다음과 같습니다.

  • find: 표준 명령이지만 서로 다른 표준에 대한 다양한 구현 및 확장이 있습니다.
  • 쉘 와일드카드. POSIX는 이 유틸리티에 대해 와일드카드를 다시 지정 sh하지만 이는 매우 제한적이며 일부 쉘에서는 이를 확장합니다. zsh필요한 기능을 갖춘 ' 만 있을 수도 있습니다 .

크기 및/또는 디스크 사용량을 확인하려면 다음 옵션을 사용하세요.

  • du하지만 안타깝게도 다음 유형의 파일에는목차, 파일의 디스크 사용량만 제공할 수는 없습니다.
  • GNU 구현에는 디스크 사용량이나 크기를 인쇄하도록 지시할 수 있는 예측이 find있습니다 .-printf
  • stat이를 수행할 수 있는 다양한 호환되지 않는 유틸리티 구현이 있습니다. 흥미롭게도 zsh여기에는 임의의 파일 경로를 안정적으로 처리할 수 있는 내장된 기능 중 하나가 있으며 아마도 유일한 기능일 것입니다.

동일한 파일을 다른 경로로 식별하려면 해당 파일을 고유하게 식별해야 하는 파일의 장치 및 inode 번호를 보고하여 를 사용할 gfind -printf수도 있습니다.stat

합계를 수행 bc하거나 awk쉘 산술을 수행할 수 있습니다.

perl, abd ruby와 같은 프로그래밍 언어 python도 위의 모든 작업을 상대적으로 쉽게 수행할 수 있습니다.

예:

LC_ALL=C find /foo ! -name '*.jpg' -printf '%D:%i %b\n' | awk '
  ! seen[$1]++ {sum += $2}
  END {print sum * 512}

GNU 구현을 사용하면 find이름이 로 끝나지 않는 파일에 대한 디스크 사용량을 제공 .jpg하고 여러 디렉터리에 연결되어 있더라도 각 파일을 한 번만 계산합니다.

zsh같은

set -o extendedglob
zmodload zsh/stat
typeset -A du
for file (/foo/**/^*.jpg(NDoN)) {
  stat -LH s -- $file &&
    du[$s[device]:$s[inode]]=$s[blocks]
}
print $(( 512 * (${(j[+])du}) ))

관련 정보