2010-11-13 52 views
0

我需要一個bash腳本,通過以下方式遞歸地列出目錄中的文件分開:bash腳本列出目錄的內容,用逗號

filename,size (in kb),numeric value (in filename) 

如:

/directory/1/file-100.txt,50,100 
/directory/1/file-200.txt,45,200 
/directory/2/file-100.txt,20,100 
/directory/2/file-500.txt,100,500 

而且,我需要它忽略所有以「.svn

+0

'樹'可能派上用場,但除此之外我不確定。 – 2010-11-13 00:44:05

回答

2

也許不是最好的方式開始目錄,但應該工作:

find /path -type f | grep -v '.svn' | xargs du -k |\ 
    awk '{print $2","$1}' | sed 's/-\([0-9]*\)\(\..*\)/-\1\2,\1/' 
0

特點:

  • 儘可能避免昂貴的橫倒的.svn - 迪爾斯。
  • 找到報告大小而不是'du'
  • 讓awk做更多的魔法,不需要sed。

對策建議解決方案:

$ find . -path '*/.svn' -prune -o -type f -printf '%p %k\n' |\ 
    awk -v OFS=, '{ print $1, $2, gensub(/[^0-9]*([0-9]*)/, "\\1", "g", $1) }' 

查找選項:

  • -path ...匹配的.svn目錄
  • -prune如果匹配(-path)是直接的哦,不要下降。
  • -o ...或...
  • 型的F僅匹配文件。
  • -printf ...打印含有1K塊(%K)路徑(%p)和尺寸定製線。

AWK:

編輯:每丹尼斯建議更新。不能相信我實際上錯過了%k,我責怪3AM。

+1

你可以設置'OFS =,'。 'find'可以'-printf%k',所以你不必在AWK中進行分割。 – 2010-11-13 02:43:50

5

試試這個:使用

find -name ".svn" -prune -o -type f -printf "%p,%k,\n" | sed 's/\([^-]\+-\([0-9]\+\)\..*\)/\1\2/' 

只有兩個工具(GNU版本可能需要)。