디스크에 있는 특정 폴더와 파일의 전체 크기를 제공할 수 있는 도구를 찾고 있습니다. 순차적으로 처리되는 여러 필터 패턴을 기반으로 프로젝트와 모든 하위 항목(그 안의 폴더 및 파일)을 명시적으로 포함하거나 제외할 수 있어야 합니다.
예를 들어 필터 패턴은 다음을 수행할 수 있어야 합니다.
- /bar(및 모든 하위 키)와 일치하지만 /foo/bar는 일치하지 않습니다.
- /bar 및 /baz를 제외하지 않고 /foo(및 모든 하위 키)만 포함합니다.
- 무제한의 레벨에서 작업하세요. 예를 들어 /foo에서 .jpg를 제외하려면 /foo/cat.jpg 및 /foo/bar/dog.jpg를 제외해야 합니다.
나는 이것을 시도했지만 du
위의 모든 것을 할 수 없었습니다.
답변1
도구를 원하는 것 같군요
- 파일 경로의 패턴을 기반으로 파일 선택
- 크기 및/또는 디스크 사용량을 검색하고 요약합니다.
그렇다면 질문이 있습니다. 일부 파일 경로가 동일한 파일을 참조하는 경우(함께 하드 링크됨) 어떻게 될까요? 동일한 파일이므로 크기를 한 번만 계산하시겠습니까?
파일을 찾으려면 주요 옵션은 다음과 같습니다.
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}) ))