2014-02-10 13 views
4

我正在研究一個特定項目,在該項目中,我需要制定大量文檔摘錄的組成,以便我們具有性能測試的基準。用於列出目錄中所有文件類型及其平均大小的命令

具體來說,我需要一個可遞歸遍歷目錄的命令,並且對於每種文件類型,都會通知我該文件的數量及其平均大小。

我已經看了解決方案,如: Unix find average file sizeHow can I recursively print a list of files with filenames shorter than 25 characters using a one-liner?https://unix.stackexchange.com/questions/63370/compute-average-file-size,但沒有得到相當我我後。

+0

所以你的意思是說什麼都不做_exactly你want_什麼,應該有人煮了東西給你? – devnull

+0

你的系統是否支持這個命令'stat --format =「%s」FILE',它會直接給你文件的大小。 – BMW

+0

@devnull好吧,也許我說得很糟糕。我不知道如何獲得我需要的地方。指針將受到歡迎。 – Mardoz

回答

5

這都和awk組合應爲你工作:

du -a mydir/ | awk -F'[.[:space:]]' '/\.[a-zA-Z0-9]+$/ { a[$NF]+=$1; b[$NF]++ } 
    END{for (i in a) print i, b[i], (a[i]/b[i])}' 
+0

謝謝,出色地工作!但是一個小小的變化,由於'du'命令中奇怪的默認塊大小,我已經將'-a'開關改爲'-ak'。 – Mardoz

+0

不客氣。是的,這會更好。 – anubhava

2

給你一些開始,用下面的腳本,你會得到一個文件列表和它的大小,逐行。

#!/usr/bin/env bash 

DIR=ABC 
cd $DIR 

find . -type f |while read line 
do 
    # size=$(stat --format="%s" $line) # For the system with stat command 
    size=$(perl -e 'print -s $ARGV[0],"\n"' $line) # @Mark Setchell provided the command, but I have no osx system to test it. 
    echo $size $line 
done 

輸出採樣

123 ./a.txt 
23 ./fds/afdsf.jpg 

然後是你的功課,與上面的輸出,你應該很容易得到的文件類型,其平均粒徑

+0

在OSX上,這提供了一個'stat:非法選項 - '。我很希望可以有更簡潔的方式來分組查找結果,但我會繼續編寫一個shell腳本。感謝指針。 – Mardoz

+1

您可以使用這一點的Perl單線程來獲取OSX上的文件大小來代替stat ... perl -e'print -s $ ARGV [0],「\ n」'somefile –

+0

謝謝,我添加了你的推薦進入我的腳本。 – BMW

0

您可以使用「嘟」可能:

du -a -c *.txt 

輸出示例:

104 M1.txt 
8 in.txt 
8 keys.txt 
8 text.txt 
8 wordle.txt 
136 total 

輸出爲512字節塊,但可以使用「-k」或「-m」進行更改。

相關問題