디렉토리 목록에 파일 크기 합계 표시


71

Windows dir디렉토리 목록 명령에는 끝에 나열된 파일이 차지하는 총 공간이 표시되는 줄이 있습니다. 예를 들어, 현재 디렉토리의 dir *.exe모든 .exe파일 , 파일 크기 및 총 크기를 표시합니다. dirbash에서 내 별칭 과 비슷한 기능을 갖고 싶지만 정확히 어떻게 진행 해야할지 모르겠습니다.

현재 내가 가진 alias dir='ls -FaGl'내에서 .bash_profile보여주는,

drwxr-x---+  24 mattdmo  4096 Mar 14 16:35 ./
drwxr-x--x. 256 root    12288 Apr  8 21:29 ../
-rw-------    1 mattdmo 13795 Apr  4 17:52 .bash_history
-rw-r--r--    1 mattdmo    18 May 10  2012 .bash_logout
-rw-r--r--    1 mattdmo   395 Dec  9 17:33 .bash_profile
-rw-r--r--    1 mattdmo   176 May 10  2012 .bash_profile~
-rw-r--r--    1 mattdmo   411 Dec  9 17:33 .bashrc
-rw-r--r--    1 mattdmo   124 May 10  2012 .bashrc~
drwx------    2 mattdmo  4096 Mar 24 20:03 bin/
drwxrwxr-x    2 mattdmo  4096 Mar 11 16:29 download/

예를 들어. 이 질문에 대한 답을 얻으십시오 .

dir | awk '{ total += $4 }; END { print total }'

그것은 나에게 합계를 제공하지만 디렉토리 목록 자체를 인쇄하지는 않습니다. 이것을 하나의 라이너 또는 쉘 스크립트로 변경하여 ls원하는 인수를 전달 dir하고 전체 목록에 합계를 더할 수 있습니까? 예를 들어, dir -R *.jpg *.tif모든 하위 디렉토리에서 해당 파일 유형의 목록과 총 크기를 얻기 위해 실행하고 싶습니다 . 이상적으로, 각 서브 디렉토리의 크기를 얻을 수 있다면 좋을 것이지만, 이것이 필수적인 것은 아닙니다.


5
ls -lh도움이되지 않습니까? 합계를 맨 위에 인쇄합니다. du -sh *.exe사람이 읽을 수있는 형태로 디스크 공간 사용 정보를 얻기 위해 실행할 수도 있습니다 .
bagavadhar

@ ashwin 'total' ls -lh이 무엇을 인쇄 하는지 모르지만 awk아래 스크립트가 계산하거나 직접 작성 하는 것과 항상 관련이있는 것은 아닙니다 . 때로는 디렉토리에있는 파일의 KB 수에 가깝지만 할당 된 크기의 하위 디렉토리를 적용하지 않는 것 같습니다. 그 숫자가 정확히 무엇인지 설명해 주시면 감사하겠습니다.
MattDMo

아래 답변이 귀하에게 적합한 지 확인하십시오
bagavadhar

1
ls -lh내용을 계산하는 디렉토리의 전체 크기를 보여주지 않음
aequalsb

답변:


25

다음 함수는 대부분의 요청을 수행합니다.

dir () { ls -FaGl "${@}" | awk '{ total += $4; print }; END { print total }'; }

...하지만에서 원하는 것을 제공 dir -R *.jpg *.tif하지는 않습니다 ls -R. 왜냐하면 그것이 작동 하는 방식이 아니기 때문입니다 . 해당 find유틸리티를 가지고 놀아보십시오 .


1
기본적으로 파일이 디스크에서 소비하는 크기가 아니라 각 파일 의 내용 크기 를 찾는 경우 에 해당됩니다. 이 구별은 매우 작은 파일에서 더 두드러집니다. 내 배포판에서 각 파일에는 4KB 청크로 디스크의 공간이 할당됩니다 (du 명령으로보고 된 것처럼 300 바이트 파일은 여전히 ​​디스크에서 4K를 사용합니다). 그것이 OP가 "각 파일이 차지하는 공간의 양"을 찾고 있다는 것을 감안할 때 du가 그것을 수행하는 방법입니다.
Jon V

1
dir이미 널리 사용되는 GNU coreutil의 이름입니다. 오히려 그런 기능의 이름을 지정하지는 않겠습니다.
디저트

Linux 및 OS-S 모두에서 작동하도록 수정하고 "-a"에는 "."가 포함됩니다. 및 ".."는 좋지 않습니다.) 다음은 고정 명령입니다. dir () {ls -FAl "$ {@}"| awk '{총 + = $ 5; 인쇄}; END {print "total :"total} '; }
Dmitry Shevkoplyas

148

이에 대한 UNIX 명령이 이미 있습니다. du

그냥 해:

du -ach 

규칙에 따라 명령 끝에 하나 이상의 파일 또는 디렉토리 경로를 추가 할 수 있습니다. -h크기를 사람에게 친숙한 형식으로 변환하는 확장 기능으로, -a"명확한"크기 (디스크 사용 대신 파일 크기)를 -c제공하고 마지막에 총계를 제공합니다.


12
예, 뒤가 잘 작동합니다. -c 옵션 (--total과 동일)을 사용하여 목록 끝에서 총계를 얻을 수 있습니다.
MikeB

6
du파일 크기의 합이 아니라 디스크 사용량 을 알려줍니다.
Stéphane Chazelas

7
du -h전달 된 파일의 크기를 합치 지 않습니다. du -h *.so각 파일의 크기는 표시하지만 합계는 표시하지 않습니다. 나는 당신이 여기서 원하는 것이 du -hc *.so(또는 심지어 du -hc *.so | tail -1) 라고 생각합니다 . 물론 그는 디렉토리 목록도 원합니다.
제한 속죄

1
이 명령은 짧은 파일 목록에서만 작동합니다. 디렉토리에 850000 개의 파일이있을 때 어떻게되는지보십시오 !!!
Hamid FzM

3
! -a의미 --all합니다. 오히려 사용을 고려--apparent-size
Arnauld VM

17

당신이 사용할 수있는 du -h -c directory|tail -1

메모리 사용량이있는 단일 행이 생성됩니다.


15
du -hs directory합계 만 원하면
Stéphane Chazelas

8

총계를 합한 현재 줄을 인쇄하십시오.

dir | awk '{ print; total += $4 }; END { print "total size: ",total }'

6

펄로 :

perl -le 'map { $sum += -s } @ARGV; print $sum' -- *.pdf

현재 디렉토리에서 숨겨지지 않은 모든 PDF 파일의 크기.


1

.bash_profile 또는 .bashrc에 다음을 추가하면 효과가 있습니다.

dir ()
{
find . -iname "$@" -exec ls -lh {} \;
find . -iname "$@" -print0|xargs -r0 du -csh|tail -n 1;
}

이제 dir * .mp3을 수행하면 재귀 적으로 끝나고 끝에 총을 인쇄합니다. 찾기에 maxdepth 매개 변수를 추가하여 원하는 깊이를 제어 할 수 있습니다. 찾기를 두 번 실행하는 것은 매우 효율적인 아이디어가 아니라는 것을 알고 있습니다. 그러나 나는 더 좋은 방법을 생각할 수 없었다. Atleast는 작업을 완료합니다.


1

위에서 언급 한 것과 같은 duawk 문을 사용하면 원하는 것을 제공 할 수 있습니다.

예: du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'

그러면 .jpg로 끝나는 사용자 abc 다운로드 폴더의 모든 파일이 나열되고 목록 끝에 모든 파일의 합계가 인쇄됩니다.


0

제안 된 다른 옵션을 사용하지 않고 dir 출력 및 크기 계산을 모두 얻으려면 tee (1) 및 프로세스 대체를 사용할 수 있습니다.

dir | tee >( awk '{ total += $4 }; END { print total }' )

대한 필요가 없습니다 tee, 단지dir | awk '{print; total += $4}; END {print total}'
스테판 Chazelas가

0
du path_to_your_files/*.jpg | awk '{ total += $1 }; END { print total }'

3
첫째, 단지 명령을 내리는 것은 답이 아닙니다. 둘째, 전체 질문, 다른 답변 및 내 의견을 읽으려고 귀찮게했다면 이것이 내가 원하는 것이 아니라는 것을 알았을 것입니다.
MattDMo

포스터를 공평하게하기 위해 이것은 Google 검색의 첫 번째 검색 결과이며 linux sum human readable sizes내가 찾고있는 것입니다.
Sridhar Sarnobat

-2
du * | awk -v sum=0 '{print sum+=$1}' | tail -1

이것은 내가 요구 한 것을하지 않습니다.
MattDMo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.