簡體   English   中英

計算shell中文件的大小

[英]Calculate size of files in shell

我正在嘗試計算僅使用shell匹配文件名模式的所有文件(在目錄樹中)的總大小(以字節為單位)。 這是我到目前為止:

find -name * .undo -exec stat -c%s {} \\; | awk'{total + = $ 1} END {print total}'

有更簡單的方法嗎? 我覺得應該有一個簡單的du或find開關為我做這個,但我找不到一個。

為了清楚起見,我希望在目錄樹下的任何位置匹配模式的文件總數,這意味着

du -bs * .undo

將無法正常工作,因為它只匹配當前目錄中的文件。

嘗試:

find . -name "*.undo" -ls | awk '{total += $7} END {print total}'

在我的系統上,文件的大小是find -ls輸出中的第七個字段。 如果你的find … -ls輸出不同,請調整。

在此版本中,使用現有目錄信息(文件大小)和find的內置ls功能應該是高效的,避免進程創建或文件i / o。

使用zsh,您可以使用擴展的globbing來執行:

du -c ** / *。撤消

find -name *.undo -print0 | du -hc --files0-from=-
du -c *pattern*

這將在最后一行輸出上打印總數。

我一直在看這個問題(僅一年后......) - 只是剛剛找到這個頁面。

我找到的東西(對我來說)有以下幾點:

find /mnt/iso -name *.avi -printf "%s\n" | paste -sd+ - | bc

這將返回/ mnt / iso下所有子文件夾中所有.avi文件的總大小

我必須贊美radoulov的粘貼命令 - 請參閱此頁: Shell命令求和整數,每行一個?

只是添加 - 以防文件夾與搜索詞匹配 - 最好在find命令中使用-type f

find -name '*.undo' -exec wc -c {} + | tail -n 1

如果你沒有太多的文件(“太多”將是一個非常大的數字,可能是數千),應該給出文件中的實際總字節數。 或者如果你只是想單獨得到數字,

find -name '*.undo' -exec wc -c {} + | tail -n 1 | cut -d' ' -f 1

Python是大多數Linux發行版的一部分。

import os
import fnmatch
size= 0
for path, dirs, files in os.walk( '.' ):
    for f in files:
        if fnmatch.fnmatch(f,'*.py'):
            fileSize= os.path.getsize( os.path.join(path,f) ) 
            print f, fileSize
            size += fileSize
print size

很長,但非常清晰,高度可擴展。

find -name '*.undo' -print0 | du -hc --files0-from=- | tail -n 1

gerdemb和strager的貢獻中匯集起來。 使用du -cb應該顯示字節。

我使用這樣的du命令來獲取數字:

du file_list | awk '{s+=$1} END {print s}'

這個簡單的怎么樣?

find ./ -name *.undo | xargs wc

或者,你可以這樣做:

dir=$1

for file in $dir/* ; do

 length_file=`stat -c %s $file`
 echo "File $file has length $length_file"
 length_total=`expr $length_total + $length_file`

done

echo "Total length: $length_total ."

stat顯示文件或文件系統狀態。 參數-c表示使用指定的格式而不是默認格式,格式序列$ s允許顯示字節的總大小。

expr 

只是評估一個表達式。

Perl單線:

find . -name "*.undo" -ls | perl -lane '$t += $F[6]; END{print $t}'

@F autosplit數組從索引$F[0]開始,而awk字段以$ 1開頭,因此使用$F[6]而不是awk的$7

du -c | awk'/./ {line = $ 0} END {print $ 1}'

我認為xargs的版本可以被改進(簡化)ls -1 * .undo | xargs wc

檢查du (磁盤使用情況)命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM