2010-02-10 10 views
7

Voglio ottenere la dimensione del file in variabile? Come farlo?dimensione file shell Linux

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

ha fornito la dimensione ma come memorizzarla nella variabile di shell?

+0

Bash, presumo? – ziya

+0

sì è shell bash e grazie a tutti. –

+1

Possibile duplicato di [Come verificare la dimensione di un file?] (Http://stackoverflow.com/questions/5920333/how-to-check-size-of-a-file) –

risposta

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

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

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

Non è garantito che la dimensione sarà nel campo 6 quando è delimitata da spazi. –

+0

Questo è anche inefficiente perché piping 'ls' in' grep' elenca * tutti * i file nella directory e ordina i loro nomi (che possono impiegare una notevole quantità di tempo in una directory con migliaia di file), e inoltre incline agli errori perché 'grep testing.txt' restituisce anche i file con nomi come' not_testingatxt_file' (come '.' in un'espressione regolare significa match-any-character). –

4

si può fare in questo modo con ls (controllare la pagina man per senso di -s)

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

Oppure si può utilizzare stat con -c '%s'

Oppure si può usare find (GNU)

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

la soluzione di ricerca funziona su MINGW e git bash su Windows. Nessuna delle altre risposte funziona su MINGW. – JDiMatteo

+0

Se volevi una versione che funzionasse su * ogni * sistema POSIX, 'wc -c' sarebbe meglio che fare affidamento su' ls' behavior * o * per avere GNU 'find' o' stat' disponibili. –

+0

Nota che wc -c è più accurato per file pseudo come/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 
Problemi correlati