내 디렉토리에는 수백 개의 pdf 파일과 html 파일이 있습니다. PDF 파일의 전체 크기를 알고 싶습니다.
명령을 사용하면 du -ch /var/foo
전체 파일 크기를 볼 수 있지만 전체 크기인 마지막 줄만 필요합니다.
디렉토리에 pdf 파일만 포함된 경우 이 옵션을 사용할 수 있지만 -s
이번에는 해당 옵션을 사용할 수 없습니다.
특정 파일 형식의 전체 크기만 얻는 방법은 무엇입니까?
답변1
GNU du
(즉, 내장되지 않은 Linux 또는 Cygwin)의 경우 이 --exclude
옵션을 사용하여 일치시키고 싶지 않은 파일을 제외할 수 있습니다.
du -s --exclude='*.html' /var/foo
파일을 적극적으로 일치시키려면 *.pdf
다른 방법을 사용하여 파일을 나열하고 du
각 인수에 대해 하나 이상의 출력 행과 options 를 포함한 합계를 표시해야 합니다 -c
. 호출하여 tail
마지막 줄을 제외한 모든 항목을 삭제하거나 sed를 사용하여 "total"이라는 단어를 삭제할 수 있습니다. 이 디렉터리의 파일을 열거하려면 셸에서 와일드카드 문자를 사용하세요.
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}'
답변2
쉘이 파일을 확장하도록 할 수 있습니다:
$ 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
.
답변3
"find" 명령을 사용하면 이 질문에 대한 답변에서 찾을 수 있는 다음과 같은 결과를 얻을 수 있습니다.
답변4
GNU를 사용 find
하고 다음을 수행하십시오 du
.
LC_ALL=C find . -iname '*.pdf' -type f -print0 |
du -ch --files0-from=- |
tail -n 1
이름이 ( , ...) .pdf
또는 기타 변형으로 끝나는 모든 일반 파일의 누적 디스크 사용량입니다..PDF
.pdF
디스크 사용량(예: 모든 파일에서 읽을 수 있는 데이터의 양) 대신 파일 크기 합계(동일한 파일에 대한 모든 하드 링크 계산)를 보려면 에 및 옵션을 추가하거나 --count-links
대신 --apparent-size
을 사용할 du
수 있습니다 . ( 힌트 대로 ). PDF 파일의 심볼릭 링크 수도 계산하려면 이 옵션을 변경하여 추가 하세요 .du -lbch
du -ch
-b
--apparent-size
-type
-xtype
--dereference-args
du