디렉토리에 수백 개의 pdf 파일과 html 파일이 있습니다. 그리고 PDF 파일의 전체 크기를 알고 싶습니다.
명령으로 du -ch /var/foo
총 파일 크기를 볼 수 있지만 총 크기 인 마지막 줄만 필요합니다.
디렉토리에 pdf 파일 만 포함되어 있으면 -s
옵션을 사용할 수 있지만 이번에는 옵션을 사용할 수 없습니다.
특정 파일 형식의 총 크기 만 얻으려면 어떻게해야합니까?
답변
GNU du
(즉, 내장되지 않은 Linux 또는 Cygwin)에서는 --exclude
옵션을 사용하여 일치하지 않는 파일을 제외 할 수 있습니다 .
du -s --exclude='*.html' /var/foo
*.pdf
파일 을 정확하게 일치 시키려면 다른 방법을 사용하여 파일을 나열해야 du
하며 인수 당 하나 이상의 출력 행과 옵션으로 총계를 표시해야합니다 -c
. tail
마지막 줄을 제외한 모든 줄을 제거하거나“total”단어를 제거하기 위해 sed를 호출 할 수 있습니다 . 한 디렉토리에있는 파일을 열거하려면 쉘에서 와일드 카드를 사용하십시오.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
서브 디렉토리에서도 파일을 탐색해야하는 경우, 쉘이 지원하는 경우을 find
사용하거나 **/
패턴을 사용하십시오. 를 들어 **/
, bash는, 첫 번째 실행에서 shopt -s extglob
, 그리고 4.2까지의 bash 버전이 디렉토리에 심볼릭 링크를 통과 않습니다; zsh에서는 즉시 작동합니다.
du -sc /var/foo/**/*.pdf | tail -n1
찾기 버전과 관련된 추가 문제는 너무 많은 파일이있는 경우 명령 줄 길이 제한을 유지하기 위해 두 번 이상 find
실행 du
됩니다. 와일드 카드 방법을 사용하면 이러한 오류가 발생하면 오류가 발생합니다 ( “명령 줄 길이 제한 초과”). 다음 코드는 개행을 포함하는 일치하는 파일 이름이 없다고 가정합니다.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
답변
쉘이 파일을 확장하도록 할 수 있습니다 :
$ mkdir foo
$ echo "abc" > foo/1.pdf
$ echo "abcd" > foo/2.pdf
$ echo "abcd" > foo/3.html
$ du -ch foo/*.pdf
4,0K foo/1.pdf
4,0K foo/2.pdf
8,0K total
그러나 당신이 볼 수 있듯이 이것은 방금 만든 것처럼 파일 크기를 약 1000 배 나타냅니다. 더 나은 옵션은 다음 -b
옵션을 사용하는 것입니다.
$ du -cbh foo/*.pdf
4 foo/1.pdf
5 foo/2.pdf
9 total
큰 파일 크기는 여전히 사람이 읽을 수있는 형태로 표시됩니다 (예 🙂 173K
.