셸에서 파일 크기 계산
쉘을 사용하여 파일 이름 패턴과 일치하는 모든 파일 (디렉토리 트리)의 총 크기를 바이트 단위로 계산하려고합니다. 이것이 내가 지금까지 가지고있는 것입니다.
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
'programing' 카테고리의 다른 글
사용자가 모바일 Safari에서 탐색했는지 확인 (0) | 2021.01.16 |
---|---|
UITableViewCell 클릭시 확장 (0) | 2021.01.16 |
리프트 웹 프레임 워크가 확장 가능한 이유는 무엇입니까? (0) | 2021.01.16 |
C #의 문자열에서 "\ r \ n"을 제거하려면 어떻게해야합니까? (0) | 2021.01.16 |
jQuery를 사용하여 드롭 다운에서 선택한 현재 값 가져 오기 (0) | 2021.01.16 |