Kuinka saan tiedoston koon bash-komentosarjassa?

Kuinka voin saada tiedoston koon bash-komentosarjassa?

Kuinka määritän tämän bash-muuttujalle, jotta voin käyttää sitä myöhemmin?

Kommentit

  • stackoverflow.com/questions/5920333/how-to-check-size-of-a-file LOL siirrettävälle 🙂
  • Yhdistä tämä pv ja cat kopiokomennolle, joka näyttää edistymisen ja arvioidun odotusaikaa 🙂
  • stat -c% s -tiedosto. nimi
  • Jos kyseessä on (hyvin kapea) XY-ongelma, tämä on siisti: jos tarvitset vain testata, että tiedoston koko ei ole nolla, bashilla on ehdollinen lauseke -s, joten voit yksinkertaisesti testata, onko tiedoston pituus nollasta, if [ -s file ]; then echo "file has nonzero size" ; fi

Vastaa

Paras veto GNU-järjestelmässä:

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

Lähettäjä man stat :

% s koko, tavuina

Bash-komentosarjassa:

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

HUOMAUTUS: katso

@chbrown vastaus siitä, kuinka statia käytetään päätelaitteessa Mac OS X: ssä.

Kommentit

  • @ haunted85 stat on yksinkertaisin tapa, olettaen, että ’ käytät Linuxia tai Cygwinia (stat ei ole ’ t-standardi). wc -c kuten Eugin ehdottama é ne on kannettava.
  • stat: illegal option -- c
  • stat --printf="%s" file.txt ei ’ t tulostaa mitä tahansa Debian Jessielle …
  • MacOSissa tämä toimii: stat -f%z myfile.tar
  • @woohoo Kehote korvaa lähdön. man stat sanoo, että –printf jättää pois uuden rivin. Käytä --format tai -c nähdäksesi tulosteen. Hanki lisää tietoa vertaamalla stat --printf="%s" file.any | xxd - stat -c "%s" file.any | xxd -

vastaus

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

stat -palvelun käytössä on ongelma, että se on GNU (Linux) -laajennus. du -k ja cut -f1 on POSIXin määrittelemä ja siksi siirrettävissä mihin tahansa Unix-järjestelmään.

Esimerkiksi Solaris toimitetaan bashilla, mutta ei stat . Joten tämä ei ole täysin hypoteettinen.

ls on samanlainen ongelma, koska lähdön tarkkaa muotoa ei ole määritelty, joten sen lähdön jäsentäminen ei onnistu kannettavasti . du -h on myös GNU-laajennus.

Pidä kiinni kannettavista rakenteista aina kun mahdollista, ja helpotat jonkun elämää tulevaisuudessa. Ehkä omaa.

Kommentit

  • du ei ’ anna tiedoston koko, se osoittaa, kuinka paljon tilaa tiedosto käyttää, mikä on hienovaraisesti erilainen (yleensä du ilmoittama koko on tiedoston koko pyöristettynä lähimpään lohkojen lukumäärä, jossa lohko on tyypillisesti 512B tai 1kB tai 4kB).
  • @Gilles, harvat tiedostot (eli sellaiset, joissa on reikiä) raportoivat alle pituuden.
  • Tämän --bytes tai -b kanssa -k: n pitäisi olla hyväksytty vastaus.
  • @fralau: OP haluaa ” määrittää tämän bash-muuttujalle, jotta he voivat käyttää sitä myöhemmin ”, joten on paljon todennäköisempää, että he haluavat aktumin lukuarvo, ei ihmisen luettavissa oleva likiarvo. Lisäksi -h on GNU-laajennus; se ei ole vakio
  • du: n käyttö --apparent-size -lipun kanssa palauttaa enemmän tarkka koko (kuten ihmisellä todettiin: 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)

Vastaa

Voit käyttää myös” sanamäärä ”-komentoa (wc):

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

wc -ongelman ongelma on, että se ”lisää tiedostonimen ja sisentää tuloksen. Esimerkiksi:

$ wc -c somefile.txt 1160 somefile.txt 

Jos haluat välttää koko tulkitun kielen tai virtaeditorin ketjutuksen vain saadaksesi tiedostokokoarvon, ohjaa vain syötteitä tiedostosta siten, että wc ei koskaan näe tiedostonimeä:

wc -c < "$filename" 

Tätä viimeistä lomaketta voidaan käyttää komennon korvaamiseen nappaamaan helposti etsimäsi arvo kuorimuuttujana, kuten Gilles alla.

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

Kommentit

  • wc -c <"$FILENAME" antaa koon ilman muuta matkaa, joten size=$(wc -c <"$FILENAME").
  • Vain yksi kohta: Testasin sen juuri ja wc -c < file näyttää olevan erittäin nopea, ainakin OS X: ssä. I ’ m arvaa, että wc: llä on aivot yrittää tilata tiedosto, jos vain -c on määritetty.
  • @EdwardFalk: GNU wc -c käyttää fstat, mutta etsii sitten tiedoston toista viimeistä lohkoa ja lukee viimeiset jopa st_blksize tavut. Ilmeisesti tämä johtuu siitä, että Linuxin tiedostot ’ s /proc ja tilastokoot ovat vain likimääräisiä , ja wc haluaa ilmoittaa todellisen koon, ei tilastoraportoidun koon. Luulen, että olisi outoa, jos wc -c ilmoittaisi eri koon kuin wc, mutta se ’ ei ole ajatus lukea tietoja tiedostosta, jos se ’ on normaali levytiedosto ja ’ ei ole muistissa. Tai mikä vielä pahempaa, lähellä olevaa nauhatallennustilaa …
  • Näyttää siltä, että printf näkee edelleen sisennyksen, esim. printf "Size: $size" – > size: <4 spaces> 54339. Toisaalta echo jättää välilyönnin huomiotta. Onko mitään tapaa tehdä siitä johdonmukainen?
  • @keithpjolley: soittamalla fstat. Yritä suorittaa strace wc -c </etc/passwd ja näet, mitä se tekee.

Vastaa

BSD ”s (macOS” s) stat: llä on erilainen muotoargumenttilippu ja erilaiset kenttämäärittelyt. Alkaen man stat(1):

  • -f format: Näytä tiedot määritetyssä muodossa. Katso kelvollisten muotojen kuvaus FORMATS-osiosta.
  • … FORMATS-osio …
  • z: tiedosto tavuina.

Joten kaikki yhdessä nyt:

stat -f%z myfile1.txt 

HUOMAUTUS: katso @ b01 ”vastaus siitä, miten stat -komentoa käytetään GNU / Linux-järjestelmissä. 🙂

Kommentit

  • Huomaa, että tämä on vain BSD-ratkaisu. Se ei toimi ’ ei toimi GNU: n kanssa stat, valitettavasti.

Vastaa

Riippuu siitä, mitä tarkoitat koko .

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

antaa tiedostosta luettavien tavujen määrän. IOW on tiedoston sisällön koko. Se lukee kuitenkin tiedoston sisällön (paitsi jos tiedosto on tavallinen tiedosto tai symboli normaaliin tiedostoon useimmissa wc -toteutuksissa optimointina). Tällä voi olla sivuvaikutuksia. Esimerkiksi nimettyä putkea varten luettua ei voi enää lukea uudelleen ja esimerkiksi /dev/zero tai /dev/random, jotka ovat ääretön koko, se vie jonkin aikaa. Tämä tarkoittaa myös sitä, että tarvitset read -oikeuden tiedostoon, ja tiedoston viimeisen käyttöajan leima saattaa päivitettävä.

Tämä on vakio ja kannettava, mutta huomioi, että jotkin wc -toteutukset saattavat sisällyttää kyseiseen tulokseen johtavia aihioita. Yksi tapa päästä eroon niistä on käyttää:

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

tai välttää virhe <: n tyhj aritmeettisessa lausekkeessa. div> tai yash kun wc ei tuota tulostetta (kuten silloin, kun tiedostoa ei voi avata):

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

ksh93 on wc sisäänrakennettu (jos otat sen käyttöön, voit myös kutsua sen kuten command /opt/ast/bin/wc), mikä tekee siitä tehokkaimman tavallisille tiedostoille tässä kuoressa.

Eri järjestelmissä on komento nimeltä stat että on käyttöliittymä stat() tai lstat() järjestelmäkutsuihin.

Nämä raporttitiedot löytyvät inode. Yksi näistä tiedoista on st_size -attribuutti. Tavallisten tiedostojen kohdalla tämä on sisällön koko (kuinka paljon tietoa siitä voidaan lukea virheiden puuttuessa (sitä useimmat wc -c -toteutukset käyttävät optimoinnissaan) ). Symlinkeille tämä on kohdepolun koko tavuina. Nimetyille putkille se on järjestelmästä riippuen joko 0 tai putkipuskurissa tällä hetkellä olevien tavujen määrä. Sama estolaitteille, joissa järjestelmästä riippuen saat 0 tai taustalla olevan tallennustilan koon tavuina.

Sinun ei tarvitse lukea tiedostoa tiedostoon saadaksesi kyseiset tiedot, vain hakulupa hakemistoon, johon se on linkitetty.

Aikajärjestyksessä on:

  • IRIX stat (90 ”s):

    stat -qLs -- "$file" 

    palauttaa iv id -attribuutin st_size = ”b8ccb6d7c5”>

(lstat()) tai:

stat -s -- "$file" 

sama paitsi silloin, kun $file on symlinkki, jolloin se on tiedoston st_size symlink-tarkkuuden jälkeen.

  • zsh stat sisäänrakennettu (tunnetaan nyt myös nimellä zstat) moduulissa zsh/stat (ladattu zmodload zsh/stat) (1997):

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

    tai tallentaa muuttujaan:

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

    tietysti se on tehokkain tuo kuori.

  • GNU stat (2001); myös BusyBoxissa stat vuodesta 2 005 (kopioitu GNU: sta stat):

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

    (huomioi merkinnän on päinvastainen kuin IRIX tai zsh stat.

  • BSD-levyt stat (2002):

    stat -f %z -- "$file" # st_size of file stat -Lf %z -- "$file" # after symlink resolution 
  • Tai voit käyttää jonkin komentosarjakielen, kuten iv id =, toimintoa stat() / lstat(). ”ddc46a7499”> :

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

    AIX: lla on myös istat -komento , joka tyhjentää kaikki stat() (ei lstat(), joten ei toimi symlinkeissä ) tiedot ja joita voit käsitellä esimerkiksi:

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

    (kiitos @JeffSchaller auttaa yksityiskohtien selvittämisessä ).

    Kohdassa tcsh:

    @ size = -Z $file:q 

    (koko symlink-tarkkuuden jälkeen)

    Kauan ennen kuin GNU esitteli stat -komennon, sama voidaan saavuttaa GNU: lla find -komento -printf -edikaatilla (jo vuonna 1991):

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

    Yksi asia on kuitenkin se, että ei ”t toimi, jos $file alkaa - tai on find predikaatti (kuten !, ( …).

    Vakiokomento, jolla saat stat() / lstat() tiedot ovat ls.

    POSIXly, voit tehdä seuraavaa:

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

    ja lisää -L samalle symbolilinkin tarkkuuden jälkeen. Se ei toimi laitetiedostoissa, vaikka viides th -kenttä on laitteen pääluku koon sijaan.

    Estolaitteille järjestelmät, joissa stat() palauttaa arvon 0, kun st_size, yleensä niillä on muut sovellusliittymät, jotka ilmoittavat estolaitteen koon. Esimerkiksi Linuxilla on BLKGETSIZE64 ioctl(), ja useimmat Linux-jakelut toimitetaan nyt blockdev -komennolla, joka voi käyttää sitä:

    blockdev --getsize64 -- "$device_file" 

    Tarvitset kuitenkin laitetiedoston lukuoikeuden. Koon voi yleensä johtaa muilla tavoin. Esimerkiksi (edelleen Linuxissa):

    lsblk -bdno size -- "$device_file" 

    Pitäisi toimia tyhjiä laitteita lukuun ottamatta.

    Lähestymistapa, joka toimii kaikille haettavat tiedostot (sisältää tavalliset tiedostot, useimmat estolaitteet ja jotkut merkkilaitteet) on avata tiedosto ja etsiä loppuun:

    • Kanssa zsh (moduulin zsh/system lataamisen jälkeen):

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

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

      tai

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

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

    Nimettyjen putkien kohdalla olemme nähneet, että jotkut järjestelmät (ainakin AIX, Solaris, HP / UX) tekevät putkipuskurissa olevan datan saataville stat() ”s st_size. Jotkut (kuten Linux tai FreeBSD) eivät t.

    Ainakin Linuxissa voit käyttää FIONREAD ioctl() sen jälkeen kun olet avannut putken (luku- ja kirjoitusmuodossa sen roikkumisen välttämiseksi):

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

    Huomaa kuitenkin, että vaikka se ei ”t lue putken sisältö, nimetyn putken pelkällä avaamisella voi silti olla sivuvaikutuksia. Tarkistamme ensin fuser -toiminnon tarkistaaksemme ensin, että jossakin prosessissa on jo putki auki sen lievittämiseksi, mutta se ei ole hämmentävää kuin fuser saattaa ei voi tarkistaa kaikkia prosesseja.

    Olemme toistaiseksi harkinneet vain tiedostoihin liittyvien ensisijaisten tietojen kokoa.Tässä ei oteta huomioon metatietojen kokoa ja kaikkea kyseisen tiedoston tallentamiseen tarvittavaa infrastruktuuria.

    Toinen stat() palauttama inode-attribuutti on st_blocks. Se on 512 tavun lohkojen määrä, jota käytetään tiedoston tietojen (ja joskus joidenkin sen sisällönkuvaustietojen, kuten laajennettujen attribuuttien tallentamiseen ext4-tiedostojärjestelmiin Linuxissa) tallentamiseen. ”ei sisällä itse inodia tai merkintöjä hakemistoihin, joihin tiedosto on linkitetty.

    Koko ja levyn käyttö eivät välttämättä liity tiiviisti pakkaamiseen, harvinaisuuteen (joskus metatietoihin), ylimääräiseen infrastruktuuriin, kuten epäsuoriin lohkoihin. joissakin tiedostojärjestelmissä on vaikutusta jälkimmäiseen.

    Sitä du yleensä käyttää levykäytön ilmoittamiseen. Suurin osa yllä luetelluista komennoista pystyy saat nämä tiedot.

    • POSIXLY_CORRECT=1 ls -sd -- "$file" | awk "{print $1; exit}"
    • POSIXLY_CORRECT=1 du -s -- "$file" (ei hakemistoille) missä siihen sisältyisi levyn käyttöoikeus 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"

    Kommentit

    • selvästi kattavin ja informatiivisin vastaus. Kiitos. Voin käyttää tätä luomaan alustojen välisiä bash-komentosarjoja käyttämällä BSD- ja GNU-tilastotietoja
    • Hauska tosiasia: GNU coreutils wc -c käyttää fstat, mutta sitten lukee viimeiset ylöspäin st_blksize -tavut. Ilmeisesti tämä johtuu siitä, että Linuxin tiedostot ’ s /proc ja tilastokoot ovat vain likimääräisiä . Tämä on hyvä virheellisyydelle, mutta huono, jos tiedoston loppu on levyllä eikä muistissa (etenkin jos sitä käytetään monissa silmukan tiedostoissa). Ja erittäin huono, jos tiedosto siirretään lähilinjan nauhatallennustilaan tai esim. FUSE-läpinäkyvän purkamisen tiedostojärjestelmä.
    • tämä ei toimi myöskään ls -go file | awk '{print $3}'
    • @StevenPenny niille -go olisi SysV-tiedostoja, he eivät toimi ’ t BSD-levyillä (valinnainen (XSI) POSIXissa). Tarvitset ’ d myös ls -god file | awk '{print $3; exit}' (-d, jotta se toimisi hakemistoissa, exit symlinkeille, joiden kohdalla on uusia viivoja). Laitetiedostojen ongelmat ovat edelleen olemassa.
    • @ αғsнιη Unix-sovellusliittymässä ei tehdä eroa teksti- ja binaaritiedostojen välillä. Se ’ s kaikki tavusekvenssit. Jotkut sovellukset saattavat haluta tulkita tavut tekstinä, mutta eivät selvästikään wc -c, joka raportoi tavujen määrän.

    Vastaa

    Tämä komentosarja yhdistää useita tapoja laskea tiedostokoko:

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

    Komentosarja toimii monissa Unix-järjestelmissä mukaan lukien Linux, BSD, OSX, Solaris, SunOS jne.

    Tiedoston koko näyttää tavujen määrän. Se on näennäinen koko, joka on tavu, jota tiedosto käyttää tyypillisellä levyllä, ilman erityistä pakkausta, erityisiä harvoja alueita tai kohdistamattomia lohkoja jne.

    Tällä komentosarjalla on tuotantoversio, jossa on enemmän apua ja lisää vaihtoehtoja täällä: https://github.com/SixArm/file-size

    Vastaa

    stat näyttää tekevän tämän tekemällä vähiten järjestelmäkutsuja:

    $ 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 

    Vastaus

    ls -l filename antaa sinulle paljon tietoa tiedostosta, mukaan lukien sen koko, käyttöoikeudet ja omistaja.

    Tiedoston koko viidennessä sarakkeessa, ja se näytetään tavuina. Alla olevassa esimerkissä tiedostokoko on hieman alle 2 kt: n:

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

    Muokkaa: Tämä ei ilmeisesti ole yhtä luotettava kuin komento stat.

    Kommentit

    • Luulen, että ls -l ja stat -komento antaa luotettavaa kokotietoa. En löytänyt mitään viitteitä päinvastaisesta. ls -s antaa lohkojen koon.
    • @ dabest1 se ’ ei ole luotettava siinä mielessä, että toinen unix, niiden tulos voi olla erilainen (ja joissakin unixeissa se onkin).
    • Kyllä, IIRC, Solaris ei näyttänyt ryhmän nimeä oletusarvoisesti, johtaa vähemmän sarakkeisiin tuotoksessa.
    • Koska koko on puhdas numeerinen, välilyönnin ympäröimä ja päivämäärävuosi on puhdas numeerinen, määritetyssä muodossa, olisi mahdollista käyttää regexpiä käyttäjän käsittelemiseksi + omistaja yhtenä kenttänä riippumatta siitä, oliko ryhmä läsnä vai ei. (harjoitus lukijalle!)

    Vastaa

    du filename kertoo levyn käytön tavuina.

    Pidän parempana du -h filename, joka antaa sinulle koon ihmisen luettavassa muodossa.

    Kommentit

    • että tai stat -c "%s"😉
    • Tämä makuun du tulostaa koon lohkoina 1024 tavua, ei yksinkertainen tavujen määrä.
    • Huomaa, että vakio du antaa tuotoksen 512 tavun yksikköinä. GNU du käyttää sen sijaan kibibyyttejä, ellei sitä kutsuta ympäristössä POSIXLY_CORRECT.
    • Tiedostotyypeille hakemisto , joka antaa hakemiston, mutta myös kaikkien muiden tiedostojen (rekursiivisesti) levykäytön.

    Vastaa

    Luo komentosarjojesi pienet apuohjelmatoiminnot, joihin voit delegoida.

    Esimerkki

    #! /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 

    Perustuu @ Stéphane Chazelasin tietoihin ”. vastaus.

    Kommentit

    • Katso myös gzip -v < file > /dev/null ja tarkista tiedoston pakattavuus.
    • @St é phaneChazelat eivät ole varma, onko se mielestäni parannusta. Nämä tapausehdot voivat helposti työntää noobit pois; en todellakaan koskaan muista, kuinka saada ne oikein 🙂 ovat tapauslausekkeita luonnostaan kannettavampia, koska tein sen? Näen järjen, kun tapauksia on enemmän kuin kaksi, mutta muuten … +
    • Oletan, että se ’ on myös makukysymys, mutta tässä se ’ on tyypillinen tapaus, jossa ’ haluat käyttää case -lauseke. case on Bourne / POSIX-rakenne, joka tekee mallin vastaavuuden. [[...]] on vain ksh / bash / zsh (muunnelmilla).

    Vastaa

    Löysin AWK 1 -vuoren, ja siinä oli vika, mutta korjasin sen. Lisäsin myös PetaBytes-tiedostoihin TeraByttien jälkeen.

    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] }") 

    Harkitaan stat ei ole kaikissa järjestelmissä, voit melkein aina käyttää AWK-ratkaisua. Esimerkki; Vadelma Pi: llä ei ole stat , mutta sillä on awk .

    Kommentit

    • EIVÄT ole mitä OP kysyi, mutta hieno pieni työ.

    Vastaa

    Pidän itse wc-vaihtoehdosta. Yhdistettynä ”bc”: hen saat desimaaleja niin moniin paikkoihin kuin haluat.

    Halusin parantaa skriptiä, jonka minulla oli awk ”edistänyt” ls – ”tiedostokoko” -sarakkeen – alh ”komento. En halunnut vain kokonaislukutiedostokokoja, ja kaksi desimaalia näytti sopivan, joten luettuani tämän keskustelun keksin alla olevan koodin.

    Ehdotan rivin katkaisemista puolipisteissä, jos sisällytät tämän komentosarjaan.

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

    Oma komentosarjaa kutsutaan nimellä gpfl , ”Hae kuvatiedoston pituus”. Käytän sitä sen jälkeen, kun olen suorittanut mogrify -tiedoston imagemagickissa, ennen kuin avasin tai ladasin kuvan uudelleen GUI jpeg -näkymään.

    En tiedä kuinka ”vastaus”, koska se lainaa paljon siitä, mitä jo on tarjottu ja josta on keskusteltu. Joten ”jätän sen sinne.

    BZT

    Kommentit

    • Haluaisin mieluummin käyttää ” stat ” tai ” ls ”. Tyypillisesti en halua ’ käyttää ” wc ” tiedostokokojen saamiseksi, koska se lukee fyysisesti koko tiedoston. Jos sinulla on paljon tiedostoja tai erityisen suuria tiedostoja, tämä voi viedä paljon aikaa. Mutta ratkaisusi on luova … + 1.
    • Olen samaa mieltä käsityksestä ” stat ” -sivun käytöstä ” wc ”

    wc -c ”, tietoja ei lueta; sen sijaan lseek käytetään selvittää tiedoston tavujen määrä. lingrok.org/xref/coreutils/src/wc.c#228

  • @ bbaja42 : Huomaa, että GNU Coreutils lukee tiedoston viimeisen lohkon, jos stat.st_size oli vain likiarvo (kuten Linux /proc ja /sys -tiedostot). Luulen, että he päättivät olla tekemättä pääkommenttia monimutkaisemmaksi, kun he lisäsivät logiikan pari riviä alaspäin: lingrok.org/xref/coreutils/src/wc.c#246
  • vastaus

    Nopein ja yksinkertaisin (IMO) menetelmä on:

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

    Kommentit

    • Äänestä sitten yhtä tai useampaa olemassa olevista vastauksista, joissa mainitaan stat; ei tarvitse toistaa sitä uudestaan …
    • @JeffSchaller Äänestin juuri Stephane ’ vastauksen ohjeistasi.Mielestäni se on liian monimutkainen tarkoitukselleni. Siksi lähetin tämän yksinkertaisen vastauksen samanmielisille sieluille.
    • Kiitos; se ’ on juuri se, että ” stat ” kuudes esiintymä / div> answer doesnt ’ t yksinkertaista tätä Q & A, mutta mieluummin saa uuden lukijan kysymään itseltään ”>

    miten tämä vastaus eroaa muista vastauksista? ” ja aiheuttaa enemmän sekaannusta vähemmän.

  • Luulen, että @JeffSchaller. Mutta voisin valittaa monista du ja wc vastauksista, joilla olisi oltava vastuuvapauslauseke ÄLÄ KOSKAAN TEE TÄTÄ todellisuudessa elämää. Käytin vastausta vasta tosielämän sovelluksessa tänä iltana ja ajattelin, että se oli kannattavaa jakaa. Luulen, että meillä kaikilla on mielipiteemme kohauttaa olkapäitään .
  • Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *