2010-02-10 35 views
7

我想將文件大小變成變量嗎?怎麼做?linux shell文件大小

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

給出了大小,但如何將它存儲在shell變量中?

+0

Bash我推測? – ziya 2010-02-10 10:50:08

+0

是的,它是bash shell,謝謝大家。 – 2010-02-10 13:33:04

+1

可能重複的[如何檢查文件的大小?](http://stackoverflow.com/questions/5920333/how-to-check-size-of-a-file) – 2015-10-01 08:05:47

回答

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

MacOS X上的'stat -f'%z'' – Matt3o12 2014-08-08 17:39:14

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

當空間分隔時,不能保證大小在字段6中。 – 2015-03-23 20:06:34

+0

這也是低效率的,因爲將'ls'編入'grep'列出目錄中的所有*文件並對它們的名稱進行排序(這可能會在包含數千個文件的目錄中花費大量時間),並且還會出現錯誤,因爲'grep testing.txt'也會返回名稱類似'not_testingatxt_file'的文件(正則表達式中的'.'表示匹配任何字符)。 – 2015-03-23 20:09:53

4

你可以用ls這樣來做(檢查手冊頁-s的意思)

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

或者你可以使用stat-c '%s'

或者你可以使用find(GNU)

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

查找解決方案適用於Windows上的MINGW和git bash。沒有其他答案在明美工作。 – JDiMatteo 2014-10-17 15:17:05

+0

如果你想要一個在每個* POSIX系統上工作的版本,那麼'wc -c'會比依靠'ls'行爲*或*有GNU'find'或'stat'可用的更好。 – 2015-03-23 20:19:08

+0

請注意,wc -c對於/ proc/cpuinfo等僞文件更加準確 – pixelbeat 2015-03-24 03:32:07

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