programing

셸에서 파일 크기 계산

yoursource 2021. 1. 16. 10:51
반응형

셸에서 파일 크기 계산


쉘을 사용하여 파일 이름 패턴과 일치하는 모든 파일 (디렉토리 트리)의 총 크기를 바이트 단위로 계산하려고합니다. 이것이 내가 지금까지 가지고있는 것입니다.

find -name * .undo -exec stat -c % s {} \; | awk '{total + = $ 1} END {print total}'

이 작업을 수행하는 더 쉬운 방법이 있습니까? 나를 위해 이것을 수행하는 간단한 du 또는 find 스위치가 있어야한다고 생각하지만 찾을 수 없습니다.

명확하게 말하면 디렉토리 트리 아래에서 패턴과 일치하는 총 파일을 원합니다.

du -bs * .undo

현재 디렉토리의 파일과 만 일치하므로 작동하지 않습니다.


시험:

find . -name "*.undo" -ls | awk '{total += $7} END {print total}'

내 시스템에서 파일의 크기는 find -ls출력 의 일곱 번째 필드입니다 . 귀하의 경우 find … -ls출력이 다른, 조정합니다.

이 버전에서는 기존 디렉토리 정보 (파일 크기)와 find의 내장 ls 기능을 사용하는 것이 효율적이어야하며 프로세스 생성이나 파일 입출력을 피해야합니다.


zsh를 사용하면 확장 된 globbing을 사용하여 다음을 수행 할 수 있습니다.

du -c ** / *. undo


find -name *.undo -print0 | du -hc --files0-from=-

du -c *pattern*

이것은 출력의 마지막 줄에 합계를 인쇄합니다.


나도이 문제를보고 있었다 (1 년 후 ...)-방금이 페이지를 찾았다.

내가 찾은 것 (나에게)은 다음과 같습니다.

find /mnt/iso -name *.avi -printf "%s\n" | paste -sd+ - | bc

그러면 / mnt / iso 아래의 모든 하위 폴더에있는 모든 .avi 파일의 총 크기가 반환됩니다.

나는 붙여 넣기 명령에 대해 radoulov에게 크레딧을 주어야합니다-이 페이지를보십시오 : 정수를 합하는 쉘 명령, 한 줄에 하나씩?

추가하기 만하면-폴더가 검색어와 일치하는 경우- -type f찾기 명령에서도 사용하는 것이 좋습니다 .


find -name '*.undo' -exec wc -c {} + | tail -n 1

파일이 너무 많지 않은 경우 파일의 실제 총 바이트 수를 제공해야합니다 ( "너무 많음"은 정말 많은 수, 아마도 수천 개일 것입니다). 아니면 그냥 번호 만 알고 싶다면

find -name '*.undo' -exec wc -c {} + | tail -n 1 | cut -d' ' -f 1

Python은 대부분의 Linux 배포판의 일부입니다.

import os
import fnmatch
size= 0
for path, dirs, files in os.walk( '.' ):
    for f in files:
        if fnmatch.fnmatch(f,'*.py'):
            fileSize= os.path.getsize( os.path.join(path,f) ) 
            print f, fileSize
            size += fileSize
print size

길지만 완벽하게 명확하고 확장 성이 뛰어납니다.


find -name '*.undo' -print0 | du -hc --files0-from=- | tail -n 1

gerdemb 와 strager의 공헌 종합하십시오 . 사용하면 du -cb바이트가 표시됩니다.


다음과 같이 du 명령을 사용하여 번호 만 가져옵니다.

du file_list | awk '{s+=$1} END {print s}'

이 간단한 것은 어떻습니까.

find ./ -name *.undo | xargs wc

또는 다음과 같이 할 수 있습니다.

dir=$1

for file in $dir/* ; do

 length_file=`stat -c %s $file`
 echo "File $file has length $length_file"
 length_total=`expr $length_total + $length_file`

done

echo "Total length: $length_total ."

여기서 stat는 파일 또는 파일 시스템 상태를 표시합니다. 인수 -c는 기본 형식 대신 지정된 형식을 사용함을 의미하며 형식 시퀀스 $ s를 사용하면 총 바이트 크기를 표시 할 수 있습니다.

expr 

식을 평가합니다.


Perl 한 줄짜리 :

find . -name "*.undo" -ls | perl -lane '$t += $F[6]; END{print $t}'

자동 @F분할 배열은 인덱스에서 시작하고 $F[0]awk 필드는 $ 1로 시작하므로 $F[6]awk 대신 사용됩니다.$7


du -c | awk '/./{line=$0} END {print $ 1}'


xargs가있는 버전이 즉석 (간체) 될 수 있다고 생각합니다. ls -1 * .undo | xargs 화장실


du (디스크 사용) 명령을 확인하십시오 .

참조 URL : https://stackoverflow.com/questions/599027/calculate-size-of-files-in-shell

반응형