2010-02-10 9 views
7

Chcę uzyskać rozmiar pliku w zmiennej? Jak to zrobić?rozmiar pliku powłoki linuksowej

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

podał rozmiar, ale jak go przechowywać w zmiennej powłoki?

+0

Bash Przypuszczam? – ziya

+0

Tak, to jest powłoka bash i dziękuję wszystkim. –

+1

Możliwy duplikat [Jak sprawdzić rozmiar pliku?] (Http://stackoverflow.com/questions/5920333/how-to-check-size-of-a-file) –

Odpowiedz

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

'stat -f '% z'' na MacOS X. – Matt3o12

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

Nie ma gwarancji, że rozmiar będzie w polu 6, gdy zostanie oddzielony spacją. –

+0

Jest to również nieefektywne, ponieważ wypisywanie 'ls' do' grep' wymienia * wszystkie * pliki w katalogu i sortuje ich nazwy (co może zająć znaczną ilość czasu w katalogu z tysiącami plików), a dodatkowo jest podatne na błędy, ponieważ 'grep testing.txt' zwraca również pliki o nazwach takich jak' not_testingatxt_file' (jako '.' w regex oznacza match-any-character). –

4

można zrobić to w ten sposób z ls (sprawdź stronę man rozumieniu -s)

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

Albo można użyć stat z -c '%s'

Albo można użyć znajdź (GNU)

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

rozwiązanie find działa w MINGW i git bash w systemie Windows. Żadna z pozostałych odpowiedzi nie działa w MINGW. – JDiMatteo

+0

Jeśli chciałeś wersji, która działała na * każdym * systemie POSIX, 'wc -c' byłoby lepsze niż poleganie na' ls' behavior * lub * na posiadaniu GNU 'find' lub' stat'. –

+0

Zwróć uwagę, że wc -c jest dokładniejsze w przypadku pseudo plików takich jak/proc/cpuinfo – 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