2010-02-10 19 views
7

Dosya büyüklüğünü değişkene almak ister miyim? Bu nasıl yapılır?linux kabuk dosya boyutu

ls -l | grep testing.txt | cut -f6 -d' ' 

boyutu verdi, ancak kabuk değişkeninde nasıl depolanır?

+0

Bash Ben tahmin ediyorum? – ziya

+0

evet bu bash kabuk ve hepinize teşekkür ederim. –

+1

Olası çoğaltılabilir [Bir dosyanın boyutunu nasıl kontrol edebilirim?] (Http://stackoverflow.com/questions/5920333/how-to-check-size-of-a-file) –

cevap

18
filesize=$(stat -c '%s' testing.txt) 
+2

'stat -f '% z', MacOS X'te – Matt3o12

1
size=`ls -l | grep testing.txt | cut -f6 -d' '` 
+0

Boşluk sınırlandığında, alan 6'da yer alacağının garantisi yok. –

+0

Bu da verimsizdir çünkü 'grep' içine 'grep' listesi * tüm * dosyaları listeler ve isimlerini sıralar (bu, binlerce dosyaya sahip bir dizinde önemli miktarda zaman alabilir) ve ek olarak hataya yatkındır çünkü 'grep testing.txt',' 'not_testingatxt_file' gibi isimleri olan dosyaları döndürür (' .' ifadesinde bir regex, herhangi bir karakterle eşleşir). –

4

Eğer

$ var=$(ls -s1 testing.txt|awk '{print $1}') 

(-s anlamı için man sayfasına bakın) Yoksa -c '%s'

ile stat kullanabilirsiniz Yoksa kullanabilirsiniz ls ile bu şekilde yapabiliriz bulmak, (GNU)

$ var=$(find testing.txt -printf "%s") 
+0

bulma çözümü, Windows'ta MINGW ve git bash üzerinde çalışır. Diğer cevapların hiçbiri MINGW üzerinde çalışmıyor. – JDiMatteo

+0

* Her * POSIX sisteminde çalışan bir sürümü istiyorsanız, 'wc -c',' ls' davranışına * veya * GNU 'find' veya' stat' seçeneğine sahip olmaktan daha iyi olacaktır. –

+0

wc -c/proc/cpuinfo gibi sahte dosyalar için daha doğru olduğunu unutmayın. – pixelbeat

3
size() { 
    file="$1" 
    if [ -b "$file" ]; then 
    /sbin/blockdev --getsize64 "$file" 
    else 
    wc -c < "$file" # Handles pseudo files like /proc/cpuinfo 
    # stat --format %s "$file" 
    # find "$file" -printf '%s\n' 
    # du -b "$file" | cut -f1 
    fi 
} 

fs=$(size testing.txt) 
-1
a=\`stat -c '%s' testing.txt\`; 
    echo $a