bash 스크립트에서 파일 크기를 어떻게 얻을 수 있습니까?


246

bash 스크립트에서 파일 크기를 어떻게 얻을 수 있습니까?

이것을 bash 변수에 할당하여 나중에 사용할 수 있습니까?



1
진행률과 ETA를 표시하는 복사 명령 pv과 함께이 cat명령을 사용하십시오.
sudo

stat -c % s file.name
neverMind9

답변:


242

GNU 시스템을 사용하는 것이 가장 좋습니다 :

stat --printf="%s" file.any

에서 남자 합계 :

바이트 단위의 전체 크기 % s

bash 스크립트에서 :

#!/bin/bash
FILENAME=/home/heiko/dummy/packages.txt
FILESIZE=$(stat -c%s "$FILENAME")
echo "Size of $FILENAME = $FILESIZE bytes."

참고 : Mac OS X의 터미널에서 통계를 사용하는 방법은 @chbrown의 답변 을 참조하십시오.


7
@ haunted85 stat는 Linux 또는 Cygwin을 사용한다고 가정 할 때 가장 간단한 방법입니다 ( stat표준이 아님). Eugéne제안한wc -c 대로 휴대용입니다.
Gilles

2
stat: illegal option -- c
Iulian Onofrei

stat --printf="%s" file.txt데비안 Jessie에서 아무것도 출력하지 않습니다 ...
woohoo

5
MacOS에서는 다음과 같이 작동합니다.stat -f%z myfile.tar
ccpizza

2
@woohoo 프롬프트가 출력을 덮어 씁니다. man stat--printf는 후행 줄 바꿈을 생략합니다. --format또는 -c을 사용 하여 출력을 봅니다. stat --printf="%s" file.any | xxd -stat -c "%s" file.any | xxd -
손자

92
file_size_kb=`du -k "$filename" | cut -f1`

사용의 문제점 stat은 그것이 GNU (Linux) 확장자라는 것입니다. du -kcut -f1POSIX 의해 특정되므로 유닉스 시스템에 이식된다.

예를 들어 Solaris는 bash와 함께 제공되지만와 함께 제공되지는 않습니다 stat. 따라서 이것은 전적으로 가설이 아닙니다.

ls출력의 정확한 형식이 지정되지 않았기 때문에 비슷한 문제가 발생하여 출력을 구문 분석 할 수 없습니다. du -hGNU 확장이기도합니다.

가능한 곳에서 휴대용 구조물을 고수하면 미래에 누군가의 삶을 편하게 할 수 있습니다. 아마 당신의 것.


48
du파일의 크기를 지정하지 않고 파일이 사용하는 공간의 크기를 나타내며 미묘하게 다릅니다 (보통 du파일 크기는 가장 가까운 블록 수로 반올림 된 파일 크기입니다. 일반적으로 512B 또는 1kB 또는 4kB입니다.
Gilles

7
@Gilles, 스파 스 파일 (예 : 구멍이있는 파일)은 길이보다 짧습니다.
vonbrand

5
을 (를) 사용 --bytes하거나 -b사용하지 않고 -k허용되는 답변이어야합니다.
Amedee Van Gasse

1
-h의 ( "인간") 옵션은du 일반적인 경우에 가장 적합한 답을 생산하는 것입니다 file_size=`du -h "$filename" | cut -f1, 그것은 K (킬로바이트), M (메가 바이트) 또는 적절한 G (기가 바이트)를 표시한다.
fralau

1
@fralau : OP는 "이 변수를 bash 변수에 할당하여 나중에 사용할 수 있도록"하기를 원하므로 사람이 읽을 수있는 근사치가 아닌 실제 숫자 값을 원할 가능성이 훨씬 높습니다. 또한 -hGNU 확장입니다. 그것은 표준
Nemo

74

"word count"명령 ( wc)을 사용할 수도 있습니다 .

wc -c "$filename" | awk '{print $1}'

문제 wc는 파일 이름을 추가하고 출력을 들여 쓰기한다는 것입니다. 예를 들면 다음과 같습니다.

$ wc -c somefile.txt
    1160 somefile.txt

파일 크기를 계산하기 위해 전체 해석 언어 또는 스트림 편집기를 체인으로 연결하지 않으려면 파일에서 입력을 리디렉션하여 파일 wc이름 을 보지 마십시오.

wc -c < "$filename"

이 마지막 양식은 명령 대체와 함께 사용하여 아래 Gilles에서 언급 한 것처럼 쉘 변수로 원하는 값을 쉽게 가져올 수 있습니다.

size="$(wc -c <"$filename")"

30
wc -c <"$FILENAME"다른 주름없이 크기를 제공합니다 size=$(wc -c <"$FILENAME").
Gilles

6
한가지 더 요점 : 방금 테스트 한 결과 wc -c < file적어도 OS X에서는 매우 빠른 것 같습니다. -c 만 지정하면 wc에 파일을 통계하려고 시도하는 두뇌가 있다고 생각합니다.
Edward Falk

4
@EdwardFalk : GNU wc -c는을 사용 fstat하지만 파일의 마지막 블록을 찾아 마지막 st_blksize바이트 까지 읽습니다 . 분명히 이 리눅스에있는 파일 때문입니다 /proc/sys예는 대략적인 통계의 크기가 , 그리고 wc실제 크기가 아니라 통계보고 크기를보고 싶어한다. wc -c와 다른 크기를보고하는 것이 이상 wc하다고 생각하지만 파일이 일반 디스크 파일이고 메모리에 없으면 파일에서 데이터를 읽는 것이 좋습니다. 또는 최악의 니어 라인 테이프 스토리지 ...
Peter Cordes

1
printf여전히 들여 쓰기가 보이는 것처럼 보입니다 ( 예 : printf "Size: $size"->) size: <4 spaces> 54339. 반면에 echo공백은 무시합니다. 일관성을 유지하는 방법이 있습니까?
유진 쿨라 부 호프 17

2
@keithpjolley :을 호출하여 fstat. 달리기를 시도 strace wc -c </etc/passwd하면 그것이 무엇을하고 있는지 알 수 있습니다.
니모

48

BSD (Mac OS X) stat는 형식 인수 플래그와 필드 지정자가 다릅니다. 보낸 사람 man stat(1):

  • -f format: 지정된 형식을 사용하여 정보를 표시합니다. 유효한 형식에 대한 설명은 형식 섹션을 참조하십시오.
  • ... 포맷 섹션 ...
  • z: 파일 크기 (바이트)입니다.

이제 모두 함께 :

stat -f%z myfile1.txt

28

size의 의미에 따라 다릅니다 .

size=$(wc -c < "$file")

파일에서 읽을 수있는 바이트 수를 제공합니다. IOW, 그것은 파일 내용의 크기입니다. 그러나 파일의 내용을 읽습니다 (파일이 일반 파일이거나 대부분의 wc구현 에서 일반 파일에 대한 심볼릭 링크 인 경우 제외 ). 부작용이있을 수 있습니다. 예를 들어, 명명 된 파이프의 경우, 읽은 내용을 더 이상 다시 읽을 수 없으며 크기가 무한 /dev/zero하거나 비슷한 항목 /dev/random의 경우 다소 시간이 걸립니다. 또한 read파일에 대한 권한 이 필요 하며 파일의 마지막 액세스 타임 스탬프 가 업데이트 될 수 있습니다.

그것은 표준적이고 이식 가능하지만 일부 wc구현에는 해당 출력에 선행 공백이 포함될 수 있습니다. 그것들을 제거하는 한 가지 방법은 다음을 사용하는 것입니다.

size=$(($(wc -c < "$file")))

또는 빈 산술 식에 대한 오류를 방지하기 위해 dash또는 yashwc(파일을 열 수없는 경우 등)에는 출력을 생성하지 :

size=$(($(wc -c < "$file") +0))

ksh93wc내장 (당신이 그것을 가능하게 제공, 당신은 또한 그것을 호출 할 수 있습니다 command /opt/ast/bin/wc그 껍질에 정규 파일이 가장 효율적으로 만드는).

다양한 시스템에는 또는 시스템 호출에 stat대한 인터페이스 인 명령 이 있습니다.stat()lstat()

그것들은 inode에서 발견 된 정보를보고합니다. 그 정보 중 하나가 st_size속성입니다. 일반 파일의 경우 이는 컨텐츠의 크기입니다 (오류가없는 상태에서 읽을 수있는 데이터의 양 (대부분의 wc -c구현이 최적화에 사용하는 것)). 심볼릭 링크의 경우 대상 경로의 크기 (바이트)입니다. 명명 된 파이프의 경우 시스템에 따라 0 또는 현재 파이프 버퍼에있는 바이트 수입니다. 시스템에 따라 0 또는 기본 스토리지의 크기 (바이트)를 얻는 블록 디바이스의 경우에도 동일합니다.

해당 정보를 얻기 위해 파일에 대한 읽기 권한이 필요하지 않으며 연결된 디렉토리에 대한 검색 권한 만 있습니다.

시간 순서에 따라 다음이 있습니다.

  • IRIXstat (90 년대) :

    stat -qLs -- "$file"

    ( ) 의 st_size속성을 반환 하거나$filelstat()

    stat -s -- "$file"

    $file심볼릭 링크 인 경우를 제외하고 는 동일하지만 st_size심볼릭 링크 분석 후 파일의 파일입니다.

  • zsh stat모듈 zstat내장 (현재로도 알려져 있음 ) (1997) :zsh/statzmodload zsh/stat

    stat -L +size -- $file # st_size of file
    stat +size -- $file    # after symlink resolution
    

    또는 변수에 저장 :

    stat -L -A size +size -- $file

    분명히, 그것은 그 껍질에서 가장 효율적입니다.

  • GNUstat (2001); 또한 stat2005 년부터 BusyBox 에서 (GNU에서 복사 stat) :

    stat -c %s -- "$file"  # st_size of file
    stat -Lc %s -- "$file" # after symlink resolution
    

    (의 의미는 -LIRIX 또는와 비교하여 반대 zsh stat입니다.

  • BSDstat (2002) :

    stat -f %z -- "$file"  # st_size of file
    stat -Lf %z -- "$file" # after symlink resolution
    

또는 다음 과 같은 일부 스크립팅 언어 의 stat()/ lstat()기능을 사용할 수 있습니다 perl.

perl -le 'print((lstat shift)[7])' -- "$file"

AIX는 또한이 istat명령은 모든 덤프 stat()(안 lstat()예를 들어, 그래서 심볼릭 링크에서 작동하지 않습니다) 정보와 당신이 수 게시 프로세스를 :

LC_ALL=C istat "$file" | awk 'NR == 4 {print $5}'

( 세부 사항을 알아내는 데 도움을 주신 @JeffSchaller에게 감사드립니다 ).

에서 tcsh:

@ size = -Z $file:q

(Symlink 해상도 후 크기)

GNU가 stat명령을 소개하기 오래 전에 , 술어 find와 함께 GNU 명령을 사용 하여 동일한 작업을 수행 할 수있었습니다 -printf(이미 1991 년).

find -- "$file" -prune -printf '%s\n'    # st_size of file
find -L -- "$file" -prune -printf '%s\n' # after symlink resolution

그러나 한 가지 문제는 $file시작으로 시작 -하거나 find술어 (예 : !, (...) 인 경우 작동하지 않습니다 .

stat()/ lstat()정보 를 얻는 표준 명령 은 ls입니다.

POSIXly, 당신은 할 수 있습니다 :

LC_ALL=C ls -dn -- "$file" | awk '{print $5; exit}'

-L심볼릭 링크 해결 후 동일하게 추가하십시오 . 5 번째 필드가 크기 대신 장치 주요 번호 인 장치 파일에는 작동하지 않습니다 .

블록 장치의 경우에 stat()대해 0을 반환하는 시스템에는 st_size일반적으로 블록 장치의 크기를보고하는 다른 API가 있습니다. 예를 들어, Linux에는가 있으며 BLKGETSIZE64 ioctl()대부분의 Linux 배포에는 blockdev이를 사용할 수 있는 명령이 제공됩니다.

blockdev --getsize64 -- "$device_file"

그러나 해당 장치 파일에 대한 읽기 권한이 필요합니다. 일반적으로 다른 방법으로 크기를 도출 할 수 있습니다. 예를 들어 (여전히 Linux에서) :

lsblk -bdno size -- "$device_file"

빈 장치를 제외하고 작동해야합니다.

검색 가능한 모든 파일 (일반 파일, 대부분의 블록 장치 및 일부 문자 장치 포함)에 적용 되는 접근 방식은 파일을 열고 끝까지 찾는 것입니다.

  • 함께 zsh합니다 (로딩 후 zsh/system모듈)

    {sysseek -w end 0 && size=$((systell(0)))} < $file
  • ksh93:

    < "$file" <#((size=EOF))

    또는

    { size=$(<#((EOF))); } < "$file"
  • perl:

    perl -le 'seek STDIN, 0, 2 or die "seek: $!"; print tell STDIN' < "$file"

명명 된 파이프를 들어, 우리는 일부 시스템 (AIX, 솔라리스, HP는 / UX 적어도)에서 사용할 수있는 파이프 버퍼에있는 데이터의 양을 것을 본 적이 stat()의 ' st_size. Linux 나 FreeBSD와 같은 일부는 그렇지 않습니다.

적어도 리눅스 FIONREAD ioctl()에서는 파이프를 연 후 after를 사용할 수 있습니다 (읽기 + 쓰기 모드에서 멈추지 않도록).

fuser -s -- "$fifo_file" && 
  perl -le 'require "sys/ioctl.ph";
            ioctl(STDIN, &FIONREAD, $n) or die$!;
            print unpack "L", $n' <> "$fifo_file"

그러나 파이프의 내용을 읽지 는 않지만 여기서 명명 된 파이프를 여는 것만으로도 부작용이 발생할 수 있습니다. 우리는 fuser일부 프로세스에 이미 파이프가 열려 있는지 확인하기 위해 사용 하고 있지만 fuser모든 프로세스를 확인할 수는 없기 때문에 절대 아닙니다.

지금까지는 파일과 관련된 기본 데이터 의 크기 만 고려했습니다 . 메타 데이터의 크기와 해당 파일을 저장하는 데 필요한 모든 지원 인프라는 고려하지 않습니다.

에 의해 반환되는 다른 inode 속성 stat()st_blocks입니다. 파일의 데이터를 저장하는 데 사용되는 512 바이트 블록의 수이며 Linux의 ext4 파일 시스템의 확장 속성과 같은 일부 메타 데이터도 있습니다. 여기에는 inode 자체 또는 파일이 연결된 디렉토리의 항목이 포함되지 않습니다.

크기와 디스크 사용량은 압축, sparseness (일부 메타 데이터), 긴밀하게 관련이있는 것은 아니며 일부 파일 시스템의 간접 블록과 같은 추가 인프라는 후자의 영향을받습니다.

일반적으로 du디스크 사용량을보고 하는 데 사용됩니다. 위에 나열된 대부분의 명령은 해당 정보를 얻을 수 있습니다.

  • POSIXLY_CORRECT=1 ls -sd -- "$file" | awk '{print $1; exit}'
  • POSIXLY_CORRECT=1 du -s -- "$file" (내 파일의 디스크 사용량을 포함하는 디렉토리에는 해당되지 않음).
  • 암소 비슷한 일종의 영양 find -- "$file" -printf '%b\n'
  • zstat -L +block -- $file
  • 암소 비슷한 일종의 영양 stat -c %b -- "$file"
  • BSD stat -f %b -- "$file"
  • perl -le 'print((lstat shift)[12])' -- "$file"

가장 포괄적이고 정보적인 답변입니다. 감사합니다. 이것을 사용하여 BSD 및 GNU 통계 정보를 사용하여 크로스 플랫폼 bash 스크립트를 만들 수 있습니다
oligofren

1
재미있는 사실 : GNU coreutils wc -c는을 사용 fstat하지만 마지막 st_blksize바이트 까지 읽습니다 . 분명히 이것은 Linux의 파일 /proc/sys예를 들어 대략적인 통계 크기를 갖기 때문 입니다. 이것은 정확성에는 좋지만 파일의 끝이 디스크에 있고 메모리에 있지 않은 경우에는 좋지 않습니다 (루프의 많은 파일에서 사용되는 경우). 파일이 니어 라인 테이프 스토리지 또는 FUSE 투명 감압 파일 시스템으로 마이그레이션되는 경우 매우 나쁩니다 .
Peter Cordes

wouldnt가 너무이 작품ls -go file | awk '{print $3}'
스티븐 페니

@StevenPenny -go는 SysV 였고 BSD (POSIX의 선택적 (XSI))에서는 작동하지 않습니다. 또한 필요할 것 ls -god file | awk '{print $3; exit}'( -d이 디렉토리에 작업 할 exit대상에서 줄 바꿈과 심볼릭 링크의 경우). 장치 파일 문제도 남아 있습니다.
Stéphane Chazelas

1
@ α끼리 Unix API는 텍스트 파일과 이진 파일을 구분하지 않습니다. 모든 바이트 시퀀스입니다. 일부 응용 프로그램은 해당 바이트를 텍스트로 해석하려고하지만 wc -c바이트 수를보고하는 것은 아닙니다 .
Stéphane Chazelas

22

이 스크립트는 여러 가지 방법으로 파일 크기를 계산합니다.

(
  du --apparent-size --block-size=1 "$file" 2>/dev/null ||
  gdu --apparent-size --block-size=1 "$file" 2>/dev/null ||
  find "$file" -printf "%s" 2>/dev/null ||
  gfind "$file" -printf "%s" 2>/dev/null ||
  stat --printf="%s" "$file" 2>/dev/null ||
  stat -f%z "$file" 2>/dev/null ||
  wc -c <"$file" 2>/dev/null
) | awk '{print $1}'

이 스크립트는 Linux, BSD, OSX, Solaris, SunOS 등을 포함한 많은 Unix 시스템에서 작동합니다.

파일 크기는 바이트 수를 나타냅니다. 파일 크기는 파일이 일반적인 디스크에서 특수 압축, 특수 스파 스 영역 또는 할당되지 않은 블록 등을 사용하지 않고 사용하는 바이트입니다.

이 스크립트에는 https://github.com/SixArm/file-size에 더 많은 도움말과 옵션이있는 프로덕션 버전이 있습니다.


9

stat 는 가장 적은 시스템 호출 로이 작업을 수행하는 것으로 보입니다.

$ set debian-live-8.2.0-amd64-xfce-desktop.iso

$ strace stat --format %s $1 | wc
    282    2795   27364

$ strace wc --bytes $1 | wc
    307    3063   29091

$ strace du --bytes $1 | wc
    437    4376   41955

$ strace find $1 -printf %s | wc
    604    6061   64793

8

ls -l filename 파일 크기, 권한 및 소유자를 포함하여 파일에 대한 많은 정보를 제공합니다.

다섯 번째 열의 파일 크기이며 바이트 단위로 표시됩니다. 아래 예제에서 filesize는 2KB 미만입니다.

-rw-r--r-- 1 user owner 1985 2011-07-12 16:48 index.php

편집 : 이것은 분명히 stat명령 만큼 신뢰할 수 없습니다 .


나는 명령 ls -lstat명령 모두 신뢰할만한 크기 정보를 제공 한다고 생각합니다 . 나는 그 반대에 대한 언급을 찾지 못했습니다. ls -s블록 수로 크기를 줄 것입니다.
dabest1

2
@ dabest1 다른 유닉스에서는 출력이 다를 수 있다는 점에서 신뢰할 수 없습니다 (일부 유닉스에서는 다릅니다).
유진 Bujak

예, IIRC, Solaris는 기본적으로 그룹 이름을 표시하지 않아서 출력에서 ​​더 적은 열을 생성했습니다.
Edward Falk

크기는 공백으로 둘러싸인 순수한 숫자이고, 연도는 정의 된 형식으로 순수한 숫자이므로, regexp를 사용하여 그룹의 존재 여부에 관계없이 사용자 + 소유자를 하나의 필드로 취급 할 수 있습니다. (독자 운동!)
MikeW

5

du filename 디스크 사용량을 바이트 단위로 알려줍니다.

나는 du -h filename사람이 읽을 수있는 형식으로 크기를 제공 하는을 선호 합니다.


2
that or stat -c "%s";)

1
이 풍미는 du단순한 바이트 수가 아닌 1024 바이트 블록으로 크기 를 인쇄합니다.
피터 리용

표준 du은 512 바이트 단위의 출력을 제공합니다. 환경에서 du호출하지 않는 한 GNU 는 대신 킬로바이트를 사용 POSIXLY_CORRECT합니다.
Stéphane Chazelas

1
directory 유형의 파일의 경우 디렉토리 의 디스크 사용량과 (재귀 적으로) 다른 모든 파일의 디스크 사용량을 제공합니다.
Stéphane Chazelas

3

쉘 스크립트에서 위임 할 수있는 작은 유틸리티 함수를 작성하십시오.

#! /bin/sh -
# vim: set ft=sh

# size utility that works on GNU and BSD systems
size(){
    case $(uname) in
        (Darwin | *BSD*)
            stat -Lf %z -- "$1";;
        (*) stat -c %s -- "$1"
    esac
}

for f do
    printf '%s\n' "$f : $(gzip < "$f" | wc -c) bytes (versus $(size "$f") bytes)"
done

@ Stéphane Chazelas의 답변 정보를 기반으로합니다.


gzip -v < file > /dev/null파일의 압축성을 확인하려면 참조하십시오 .
Stéphane Chazelas

@ StéphaneChazelas 그것이 개선이라고 생각하는지 확실하지 않습니다. 이러한 사례 진술은 멍청한 놈들을 쉽게 내버려 둘 수있다. 나는 확실히 그것들을 올바르게 얻는 방법을 결코 기억하지 못한다. 나는 두 가지 이상의 경우가 있지만 요점을 참조하십시오 ... +
oligofren

1
나는 그것이 또한 맛의 문제라고 생각하지만, 여기 당신이 case진술 을 사용하고 싶은 전형적인 경우 입니다. case패턴 일치를 수행하는 Bourne / POSIX 구문입니다. [[...]]ksh / bash / zsh 만 (변이 포함)입니다.
Stéphane Chazelas

2

AWK 1 라이너를 발견했으며 버그가 있었지만 수정했습니다. 또한 TeraBytes 이후 PetaBytes에 추가했습니다.

FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')

stat 가 모든 단일 시스템에있는 것은 아니라고 생각 하면 거의 항상 AWK 솔루션을 사용할 수 있습니다. 예; Raspberry Pi에는 통계가 없지만 awk 가 있습니다 .


1
OP가 요청한 내용이 아니라 약간의 작업이 필요합니다.
집시 Spellweaver

0

다른 POSIX 호환 방법은 줄 바꾸기 문자를 제외하고 입력 파일의 각 줄에있는 문자로 길이를 반환하는 함수 awk와 함께 사용하는 것 length()입니다. 따라서

awk '{ sum+=length } END { print sum+NR }' file

우리는 확인 NR에 추가 sum하여 문자와 파일에서 발생하는 줄 바꿈의 총 수의 총 수의 결과. length()함수는 awk디폴트에 의해 인자되는 걸리는 length($0)현재 전체 라인이다.


마지막 줄이 줄 바꿈으로 끝나지 않는 경우 : printf 'a\nb' | awk '{ sum+=length } END { print sum+NR }'3을 인쇄해야하지만 4를 인쇄해야합니다.
Isaac

-1

나는 화장실 옵션을 좋아한다. 'bc'와 함께 사용하면 원하는 곳에서 소수점을 얻을 수 있습니다.

나는 'ls -alh'명령의 'file size'열을 방해하는 스크립트를 개선하려고했습니다. 정수 파일 크기 만 원하지 않았고 소수점 이하 두 자리가 적합 해 보였으 므로이 토론을 읽은 후 아래 코드를 생각해 냈습니다.

스크립트에 포함하면 세미콜론에서 줄을 바꾸는 것이 좋습니다.

file=$1; string=$(wc -c $file); bite=${string% *}; okay=$(echo "scale=2; $bite/1024" | bc);friend=$(echo -e "$file $okay" "kb"); echo -e "$friend"

"스크립트 그림 파일 길이 얻기" 라는 스크립트를 gpfl 이라고 합니다. GUI jpeg 뷰어에서 그림을 열거 나 다시로드하기 전에 imagemagick의 파일에서 mogrify 를 한 후에 사용합니다 .

이 제안이 이미 제공되고 논의 된 내용에서 많은 것을 빌리기 때문에이 답변이 어떻게 "답변"인지 알 수 없습니다. 그래서 거기에 두겠습니다.

BZT


1
"stat"또는 "ls"를 사용하고 싶습니다. 일반적으로 "wc"를 사용하여 물리적으로 전체 파일을 읽으므로 파일 크기를 얻는 것을 좋아하지 않습니다. 파일이 많거나 특히 큰 파일이 있으면 시간이 오래 걸릴 수 있습니다. 그러나 귀하의 솔루션은 독창적입니다 ... + 1.
Kevin Fegan

2
파일 크기에 "wc"대신 "stat"를 사용한다는 개념에 동의하지만 "wc -c"를 사용하면 데이터를 읽을 수 없습니다. 대신 lseek는 파일의 바이트 수를 알아내는 데 사용됩니다. lingrok.org/xref/coreutils/src/wc.c#228
bbaja42

1
@ bbaja42 : GNU Coreutils wcstat.st_size대략적인 경우 (Linux /proc/sys파일 과 같은 경우) 파일의 마지막 블록을 읽습니다 . 나는 그들이 추가 할 때 메인 댓글이 더 복잡하게하지 않기로 결정 같아요 다운 논리 몇 라인 : lingrok.org/xref/coreutils/src/wc.c#246
피터 코르

-1

가장 빠르고 간단한 (IMO) 방법은 다음과 같습니다.

bash_var=$(stat -c %s /path/to/filename)

2
그런 다음 stat에 대해 언급 된 기존 답변 중 하나 이상을 투표하십시오. 다시 반복 할 필요가 없습니다.
Jeff Schaller

1
@JeffSchaller 방금 귀하의 지시에 대한 Stephane의 답변을 공표했습니다. 내 목적으로는 너무 복잡하다고 생각합니다. 그래서 나는 마음이 같은 영혼에 대한이 간단한 답변을 게시했습니다.
WinEunuuchs2Unix 1

1
감사합니다; "통계"답변 의 여섯 번째 인스턴스가이 Q & A를 단순화하지는 않지만, 새로운 독자에게 "이 답변이 다른 답변과 어떻게 다른가?" 더 적은 혼란 대신 더 많은 혼란을 초래합니다.
Jeff Schaller

@JeffSchaller 것 같아요. 그러나 나는 실생활에서 이것을 부인 해서는 안되는 많은 것들 duwc대답 에 대해 불평 할 수 있습니다. 나는 오늘 밤 실제 응용 프로그램에서 내 대답을 사용하고 공유 가치가 있다고 생각했습니다. 나는 우리 모두 의견이 엇갈리게 있다고 생각한다 .
WinEunuuchs2Unix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.