2010-02-10 5 views
7

Je veux obtenir la taille du fichier dans la variable? Comment faire ça?Taille de fichier shell Linux

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

a donné la taille mais comment le stocker dans la variable shell?

+0

Bash je présume? – ziya

+0

oui c'est bash shell et merci à tous. –

+1

Possible copie de [Comment vérifier la taille d'un fichier?] (Http://stackoverflow.com/questions/5920333/how-to-check-size-of-a-file) –

Répondre

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

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

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

Il n'y a aucune garantie que la taille sera dans le champ 6 lorsque l'espace est délimité. –

+0

Ceci est également inefficace parce que piping 'ls' dans' grep' répertorie * tous * les fichiers dans le répertoire et trie leurs noms (ce qui peut prendre beaucoup de temps dans un répertoire avec des milliers de fichiers), 'grep testing.txt' renvoie aussi des fichiers avec des noms comme' not_testingatxt_file' (comme '.' dans une regex signifie match-any-character). –

4

vous pouvez le faire de cette façon avec ls (consultez la page de manuel de sens de -s)

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

Ou vous pouvez utiliser stat avec -c '%s'

Ou vous pouvez utiliser find (GNU)

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

la solution de recherche fonctionne sur MINGW et git bash sous Windows. Aucune des autres réponses ne fonctionne sur MINGW. – JDiMatteo

+0

Si vous vouliez une version qui fonctionne sur * tous les systèmes * POSIX, 'wc -c' serait mieux que de s'appuyer sur le comportement' ls' * ou * sur GNU 'find' ou' stat' disponible. –

+0

Notez que wc -c est plus précis pour les pseudo-fichiers comme/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 
Questions connexes