2011-10-25 157 views
1

我有這樣的腳本:bash腳本無法找到[^]

#!/bin/sh 
du -s */ [^.]*/ | sort -n | while read a; do echo $a; done | sed -r 's/^ *([ 0-9]{3})([ 0-9]{3})([ 0-9]{3}) *(.*)\/$/\1 \2 \3 \4/' 

,但由於某種原因,我得到這個錯誤:

du: cannot access `[^.]*/': No such file or directory 

我缺少什麼?我不知道我的腳本有什麼問題。

感謝

+0

你可能希望'。* /'而不是'[^。] * /' –

回答

2

猛砸默認不支持正則表達式作爲文件名模式,只有glob

通常,以.開頭的目錄不包含在*/中。如果要包含保存的文件,請使用.??*/(不包括...)。這並不完美(錯過.X/),但大部分時間都足夠好。

[編輯]您可以使用shopt -s extglob啓用一個子集的正則表達式(榮譽指出fered)。

查看Bash Extended Globbing瞭解詳情。

+0

它的工作原理,謝謝我更新到:du -s * /。[^。] */ – Tech4Wilco

+0

'bash'(版本≥4)當然可以處理正則表達式匹配:請參閱: [Bash Extended Globbing](http://www.linuxjournal.com/content/bash-extended-globbing) –

0

你是怎麼通過[^.]是什麼意思?如果你的意思是不包含點的正則表達式,那麼它相當於*/

另外while read a; do echo $a; done或多或少是沒有操作。

編輯:基於評論:

(shopt -s dotglob ; eval du -s '*/') 
+0

while循環會做的唯一事情就是將空白序列壓縮到一個空格中(因爲'$ a'沒有被引用) –

+0

我想顯示所有文件夾及其大小。所以我不想要「。」和「..」 – Tech4Wilco

+0

我明白了,我爲你添加了真正的答案。 –