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

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

나중에 사용할 수 있도록 bash 변수에 어떻게 할당하나요?

댓글

  • stackoverflow.com/questions/5920333/how-to-check-size-of-a-file 마이그레이션 LOL 🙂
  • pvcat (진행률 및 ETA를 표시하는 복사 명령 🙂
  • stat -c % s 파일. name
  • (매우 좁은) XY 문제의 경우 깔끔합니다. 파일 크기가 0이 아닌 것을 테스트하기 만하면 bash에는 조건식이 있습니다. -s, if [ -s file ]; then echo "file has nonzero size" ; fi

Answer

GNU 시스템을 사용하는 경우 가장 좋은 방법 :

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

From man stat :

% s 총 크기 (바이트)

bash 스크립트에서 :

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

참고 :

@chbrown “의 답변 은 Mac OS X의 터미널에서 stat를 사용하는 방법입니다.

댓글

  • @ haunted85 stat는 Linux 또는 Cygwin (iv id =”)을 사용한다고 가정 할 때 ‘ 가장 간단한 방법입니다. 0c0fda0b21 “> 는 ‘ 표준이 아닙니다.) wc -c (Eug에서 제안한 é ne )은 휴대 가능합니다.
  • stat: illegal option -- c
  • stat --printf="%s" file.txt는 ‘하지 않습니다. Debian Jessie에서 출력 …
  • MacOS에서는 작동합니다. stat -f%z myfile.tar
  • @woohoo 프롬프트가 출력을 덮어 씁니다. man stat는 –printf가 후행 줄 바꿈을 생략한다고 말합니다. 출력을 보려면 --format 또는 -c를 사용하세요. stat --printf="%s" file.any | xxd -stat -c "%s" file.any | xxd -

답변

과 비교하여 더 많은 통찰력을 얻으십시오.

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

stat 사용시 문제는 GNU (Linux) 확장 프로그램이라는 것입니다. du -k cut -f1 는 POSIX에 의해 지정되므로 모든 Unix 시스템에 이식 가능합니다.

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

ls는 출력의 정확한 형식이 지정되지 않았기 때문에 출력 파싱을 이식 할 수 없다는 유사한 문제가 있습니다. . du -h도 GNU 확장입니다.

가능한 경우 이식 가능한 구조를 고수하면 미래에 누군가의 삶을 더 쉽게 만들 수 있습니다. 아마도 당신의 삶일 수도 있습니다.

댓글

  • du는 ‘ 파일의 크기에 따라 파일이 사용하는 공간의 크기를 나타내며, 이는 미묘하게 다릅니다 (보통 du에서보고하는 크기는 가장 가까운 값으로 반올림 된 파일 크기입니다. 블록 수, 여기서 블록은 일반적으로 512B 또는 1kB 또는 4kB입니다.
  • @Gilles, 스파 스 파일 (즉, 구멍이있는 파일)은 길이보다 짧게보고합니다.
  • -k 대신 --bytes 또는 -b가 허용되는 답변이어야합니다.
  • @fralau : OP는 “이 변수를 나중에 사용할 수 있도록 bash 변수에 할당하려고합니다 “, 그래서 그들은 액츄를 원할 가능성이 훨씬 더 높습니다. 사람이 읽을 수있는 근사치가 아닌 모든 숫자 값입니다. 또한 -h는 GNU 확장입니다. 표준
  • 이 아닙니다.

  • --apparent-size 플래그와 함께 du를 사용하면 더 많은 정확한 크기 (man에 명시된대로 : print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like)

답변

“단어 수 “명령 (wc)을 사용할 수도 있습니다.

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

wc의 문제점은 파일 이름을 추가하고 출력을 들여 쓴다는 것입니다. 예 :

$ wc -c somefile.txt 1160 somefile.txt 

파일 크기 계산을 위해 전체 해석 언어 또는 스트림 편집기를 연결하지 않으려면 wc가 파일 이름을 볼 수 없도록 파일에서 입력을 리디렉션하면됩니다.

wc -c < "$filename" 

이 마지막 형식은 Gilles 아래.

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

댓글

  • wc -c <"$FILENAME"는 다른 부분이없는 크기를 제공하므로 size=$(wc -c <"$FILENAME").
  • 한 가지만 더 말씀 드리겠습니다. 방금 테스트했는데 wc -c < file가 적어도 OS X에서 매우 빠르다고 생각합니다. I ‘ wc는 -c 만 지정하면 파일을 stat하려는 두뇌가 있다고 추측합니다.
  • @EdwardFalk : GNU wc -c

    그러나 파일의 두 번째 마지막 블록을 찾고 마지막 최대 st_blksize 바이트를 읽습니다. 분명히 이것은 Linux ‘의 /proc 및 에는 대략적인 통계 크기가 있고 wc는 통계보고 크기가 아닌 실제 크기를보고하려고합니다. wc -cwc와 다른 크기를보고하는 것이 이상 할 것 같지만 ‘는 파일이 일반 디스크 파일이고 ‘ 메모리에없는 ‘ 파일에서 데이터를 읽는 것을 생각하지 않습니다. 또는 니어 라인 테이프 스토리지 …

  • printf에 여전히 들여 쓰기가 표시되는 것 같습니다. printf "Size: $size"-> size: <4 spaces> 54339. 반면 echo는 공백을 무시합니다. 일관성을 유지하는 방법은 없나요?
  • @keithpjolley : fstat를 호출합니다. strace wc -c </etc/passwd를 실행 해 보면 어떤 작업을하는지 확인할 수 있습니다.

답변

BSD (macOS) stat에는 다른 형식 인수 플래그와 다른 필드 지정자가 있습니다. From man stat(1) :

  • -f format : 지정된 형식을 사용하여 정보를 표시합니다. 유효한 형식에 대한 설명은 형식 섹션을 참조하세요.
  • … 형식 섹션 …
  • z : 파일 단위입니다.

이제 모두 함께 :

stat -f%z myfile1.txt 

참고 :

명령을 사용하는 방법에 대한 @ b01 “의 답변 . 🙂

댓글

  • 이 솔루션은 BSD 전용 솔루션입니다. ‘ GNU stat에서 작동하지 않습니다. div>, 안타깝게도

답변

크기 가 의미하는 바에 따라 다릅니다.

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

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

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

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

또는 dash 또는 yash wc가 출력을 생성하지 않는 경우 (예 : 파일을 열 수없는 경우) :

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

ksh93에는 wc가 내장되어 있습니다 (사용하도록 설정 한 경우 호출 할 수도 있음). as command /opt/ast/bin/wc) 셸의 일반 파일에 가장 효율적입니다.

다양한 시스템에는 statstat() 또는 lstat() 시스템 호출에 대한 인터페이스입니다.

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

파일에 대한 읽기 권한이 필요하지 않고 파일에 대한 검색 권한 만 필요합니다. 링크 된 디렉토리.

시간순으로 :

  • IRIX stat (90 “s) :

    stat -qLs -- "$file" 

    iv id의 st_size 속성을 반환합니다. = “b8ccb6d7c5”>

(lstat()) 또는 :

stat -s -- "$file" 

$file는 symlink 확인 후 파일의 st_size 인 경우 symlink입니다.

  • zsh stat 내장 (현재 iv zsh/stat 모듈의 id = “3757e42dc0”> ) (zmodload zsh/stat로로드 됨) (1997) :

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

    또는 변수에 저장 :

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

    분명히 이것이 가장 효율적입니다. 그 쉘.

  • GNU stat (2001); 2 이후에도 BusyBox stat 005 (GNU stat에서 복사) :

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

    (는 IRIX 또는 zsh stat에 비해 반대입니다.

  • BSD stat (2002) :

    stat -f %z -- "$file" # st_size of file stat -Lf %z -- "$file" # after symlink resolution 
  • 또는 iv id =와 같은 일부 스크립팅 언어의 stat() / lstat() 기능을 사용할 수 있습니다. “ddc46a7499”> :

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

    AIX에는 iv id = “7df0564b21도 있습니다. 모든 stat()를 덤프하는 “> 명령 (lstat()이 아니므로 심볼릭 링크에서 작동하지 않습니다. ) 정보 및 후 처리 할 수있는 정보, 예 :

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

    ( 세부 정보를 찾는 데 도움이됩니다 ).

    tcsh :

    @ size = -Z $file:q 

    (심볼 링크 해상도 이후의 크기)

    GNU가 stat 명령을 도입하기 훨씬 이전에 GNU find 명령에 -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 th 필드가 크기가 아닌 장치 주 번호 인 장치 파일에서는 작동하지 않습니다.

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

    blockdev --getsize64 -- "$device_file" 

    그러나이를 위해서는 장치 파일에 대한 읽기 권한이 필요합니다. 일반적으로 다른 방법으로 크기를 유도 할 수 있습니다. 예 (계속 Linux) :

    lsblk -bdno size -- "$device_file" 

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

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

    • (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, Solaris, HP / UX)이 stat() “에서 파이프 버퍼의 데이터 양을 사용할 수 있도록합니다. st_size Linux 또는 FreeBSD와 같은 일부는 그렇지 않습니다.

    최소한 Linux에서는 FIONREAD ioctl() 파이프를 연 후 (멈춤 방지를 위해 읽기 + 쓰기 모드) :

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

    그러나 읽지 않는 동안 파이프의 내용, 여기서 명명 된 파이프를 여는 것만으로도 여전히 부작용이있을 수 있습니다. 우리는 먼저 fuser를 사용하여 일부 프로세스가이를 완화하기 위해 이미 파이프가 열려 있는지 확인하지만 fuser가 모든 프로세스를 확인할 수는 없습니다.

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

    stat()에서 반환 된 또 다른 inode 속성은

    . 파일의 데이터를 저장하는 데 사용되는 512 바이트 블록의 수입니다 (그리고 때로는 Linux에서 ext4 파일 시스템의 확장 속성과 같은 일부 메타 데이터). “inode 자체 또는 파일이 링크 된 디렉토리의 항목을 포함하지 않습니다.

    크기 및 디스크 사용량은 압축, 희소성 (때로는 일부 메타 데이터), 간접 블록과 같은 추가 인프라와 밀접한 관련이있을 필요는 없습니다. 일부 파일 시스템에서는 후자에 영향을 미칩니다.

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

    • POSIXLY_CORRECT=1 ls -sd -- "$file" | awk "{print $1; exit}"
    • POSIXLY_CORRECT=1 du -s -- "$file" (디렉터리 제외) 여기에는 디스크 사용이 포함됩니다. e).
    • GNU find -- "$file" -printf "%b\n"
    • zstat -L +block -- $file
    • GNU stat -c %b -- "$file"
    • BSD stat -f %b -- "$file"
    • perl -le "print((lstat shift)[12])" -- "$file"

    댓글

    • 분명히 가장 포괄적이고 정보를 제공하는 답변입니다. 감사합니다. 나는 이것을 사용하여 BSD 및 GNU 통계 정보를 사용하여 크로스 플랫폼 bash 스크립트를 만들 수 있습니다.
    • 재미있는 사실 : GNU coreutils wc -cfstat, 마지막 최대 st_blksize 바이트를 읽습니다. 분명히 이것은 Linux ‘의 /proc 및 에는 대략적인 통계 크기가 있습니다 . 이것은 정확성에 좋지만 파일의 끝이 메모리가 아닌 디스크에있는 경우에는 좋지 않습니다 (특히 루프의 많은 파일에서 사용되는 경우). 파일이 니어 라인 테이프 스토리지 또는 예를 들어 마이그레이션 된 경우 매우 나쁩니다. FUSE 투명 압축 해제 파일 시스템.
    • 이것도 작동하지 않을까요 ls -go file | awk '{print $3}'
    • @StevenPenny -go는 SysV이며, ‘ BSD에서 작동하지 않습니다 (POSIX에서 선택 사항 (XSI)). ‘도 ls -god file | awk '{print $3; exit}' (-d가 디렉터리에서 작동하려면 exit (대상에 줄 바꿈이있는 심볼릭 링크의 경우). 장치 파일의 문제도 남아 있습니다.
    • @ αғsнιη Unix API는 텍스트와 바이너리 파일을 구분하지 않습니다. 모든 바이트 시퀀스는 ‘입니다. 일부 응용 프로그램에서는 이러한 바이트를 텍스트로 해석하려고 할 수 있지만 바이트 수를보고하는 wc -c는 분명하지 않습니다.

    Answer

    이 스크립트는 파일 크기를 계산하는 다양한 방법을 결합합니다.

    ( 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}" 

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

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

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

    답변

    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 

    답변

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

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

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

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

    댓글

    • ls -lstat 명령 모두 신뢰할 수있는 크기 정보를 제공한다고 생각합니다. 나는 그 반대에 대한 언급을 찾지 못했습니다. ls -s는 블록 수로 크기를 제공합니다.
    • @ dabest1 it ‘ 다른 유닉스에서는 출력이 다를 수 있습니다 (일부 유닉스에서는 그렇습니다).
    • 예, IIRC, Solaris는 기본적으로 그룹 이름을 표시하지 않았습니다. ‘ 출력에서 더 적은 열로 이어집니다.
    • 크기는 공백으로 둘러싸인 순수한 숫자이고 날짜 연도는 정의 된 형식의 순수한 숫자이므로 정규 표현식을 사용하여 사용자를 처리 할 수 있습니다. + 소유자를 하나의 필드로, 그룹의 존재 여부. (독자를위한 연습입니다!)

    답변

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

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

    댓글

    • that 또는 stat -c "%s"😉
    • 이 유형의 du는 크기를 블록 단위로 인쇄합니다. 단순한 바이트 수가 아닌 1024 바이트입니다.
    • 표준 du는 512 바이트 단위로 출력을 제공합니다. GNU du는 환경에서 POSIXLY_CORRECT로 호출하지 않는 한 키비 바이트를 대신 사용합니다.
    • 디렉토리 유형의 파일의 경우 , 디렉토리의 디스크 사용량뿐만 아니라 (재귀 적으로) 다른 모든 파일도 제공합니다.

    Answer

    위임 할 수있는 쉘 스크립트에 작은 유틸리티 함수를 만듭니다.

    #! /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 é phaneChazelas는 그것이 개선되었다고 생각하는지 확실하지 않습니다. 이러한 사례 진술은 멍청한 놈을 쉽게 쫓아 낼 수 있습니다. 나는 확실히 그들을 올바르게 만드는 방법을 결코 기억하지 못합니다. 🙂 본질적으로 더 이식 가능한 사례 진술입니다. 두 개 이상의 사례가있을 때 요점을 보았지만 그렇지 않으면 … +
    • ‘도 맛의 문제라고 생각합니다. 하지만 여기서는 ‘ ‘ case를 사용하려는 일반적인 경우입니다. 문. case는 패턴 일치를 수행하는 Bourne / POSIX 구조입니다. [[...]]는 ksh / bash / zsh 전용 (변형 포함)입니다.

    답변

    찾았습니다. 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에는 stat 가 없지만 awk

    .

    댓글

    • OP가 요청한 내용이 아닌 멋진 작업입니다. li>

    답변

    저는 wc 옵션이 마음에 듭니다. “bc”와 함께 사용하면 소수점을 원하는만큼 많이 얻을 수 있습니다.

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

    이를 스크립트에 포함하는 경우 세미콜론에서 줄을 끊는 것이 좋습니다.

    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

    댓글

    • ” stat ” 또는 ” ls “. 일반적으로 ‘ ” wc “를 사용하여 파일 크기를 가져 오는 것을 좋아하지 않습니다. 물리적으로 전체 파일을 읽습니다. 파일이 많거나 특히 큰 파일이 있으면 시간이 많이 걸릴 수 있습니다.하지만 솔루션은 창의적입니다 … + 1.
    • 나는 개념에 동의합니다. ” wc ” 파일 크기이지만 ” wc -c “를 사용하면 데이터가 읽히지 않고 대신 lseek가 사용됩니다. 파일의 바이트 수를 파악합니다. lingrok.org/xref/coreutils/src/wc.c#228
    • @ bbaja42 : GNU Coreutils 는 stat.st_size가 근사치 인 경우 파일의 마지막 블록을 읽습니다 (예 : Linux /proc/sys 파일). 그들은 논리를 몇 줄로 추가했을 때 주요 주석을 더 복잡하게 만들지 않기로 결정한 것 같습니다. lingrok.org/xref/coreutils/src/wc.c#246

    답변

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

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

    댓글

    • 그런 다음 stat를 언급하는 기존 답변 중 하나 이상에 찬성 투표를합니다. 다시 반복 할 필요가 없습니다 …
    • @JeffSchaller 방금 Stephane ‘의 답변에 찬성 투표했습니다.제 목적에 비해 너무 복잡하다고 생각합니다. 그래서 마음이 같은 영혼을 위해이 간단한 답변을 게시했습니다.
    • 감사합니다. ‘ ” stat ” 6 인스턴스입니다. / div> 대답은 ‘이 Q를 단순화하지 않습니다. & A, 오히려 새로운 독자가 스스로에게 질문하게 만들 것입니다. “이 답변이 다른 답변과 어떻게 다릅니 까? ” 그러면 더 적은 대신 더 많은 혼란이 발생합니다.
    • @JeffSchaller 내 생각에. 하지만 실제로 면책 조항이 있어야하는 및 wc 답변에 대해 불만을 표시 할 수 있습니다. 절대로하지 마십시오 생명. 오늘 밤 실제 응용 프로그램에서 내 대답을 사용했으며 공유할만한 가치가 있다고 생각했습니다. 나는 우리 모두가 어깨를 으쓱 하는 의견을 가지고 있다고 생각합니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다