파일 목록의 파일 크기의 합

파일 목록의 파일 크기의 합

파일 이름 목록(한 줄에 하나의 파일 이름)이 포함된 텍스트 파일이 있습니다.

이제 이 모든 파일의 크기를 계산하고 싶습니다. ls -la파일의 각 줄에 대해 작업을 수행한 다음 파일 크기를 누적해야 한다고 생각합니다 .

awk나는 이것이 해결책의 일부가 될 것이라고 생각 하지만 그것은 단지 추측일 뿐입니다.

답변1

du -c출력 의 마지막 줄만 필요합니다.

du -ch $(<list) | tail -1

답변2

GNU 사용 stat:

stat -c %s -- $(<list) | paste -d+ -s - | bc
  • stat파일에 대한 정보 표시
    • -c%s파일 크기를 바이트 단위로 제공하여 형식을 지정합니다.
  • paste -d+ -s+구분 기호로 사용하여 출력을 한 줄씩 연결합니다.
  • bc에 파이프하면 bc함께 계산됩니다.

심볼릭 링크의 경우 심볼릭 링크가 최종적으로 확인되는 파일의 크기를 계산하려는 경우 -L옵션 을 추가하세요 .stat

ksh, bashor 와 같은 쉘이 있고 연산자를 zsh사용하여 $(<file)파일 내용에 대해 분할+glob을 호출한다고 가정합니다.

이는 list공백, 탭 또는 개행(기본값 가정 $IFS)으로 구분된 파일 모드 목록( 에서와 같이 *.txt /bin/*)이어야 합니다. 파일 경로 목록(한 줄에 하나씩)을 보려면 와일드카드를 비활성화하고 $IFS줄 바꿈만 제한하거나 GNU를 사용해야 합니다 xargs.

xargs -rd '\n' -a list stat -c %s -- | paste -sd+ - | bc

답변3

나는 사용할 것이다-s파일 테스트 및 perl:

-s 파일의 크기가 0이 아닙니다(크기를 바이트 단위로 반환).

이 같은:

#!/usr/bin/env perl;
use strict;
use warnings;

my $sum = 0;
while ( my $filename = <> ) {
    chomp ( $filename );
    $sum += -s $filename;
}

print "Sum is $sum bytes\n";

STDIN(명령줄에 지정된 파일에서 파일 이름을 읽습니다. 예: myscript.pl file_list.txt)

"한 줄로" 이 작업을 수행할 수 있습니다.

perl -nle '$sum += -s $_; END { print $sum }'

(그리고 이전과 같이 "파일 이름 목록"에 파이프를 입력하거나 그 뒤에 파일 매개변수를 지정할 수 있습니다)

답변4

나는 또한 해결책을 생각해 냈습니다.

cat files.txt | while read f; do ls -la $f; done | awk '{s+=$5;} END {print s;}'

관련 정보