2011-10-25 33 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/が恋しい)しかし、ほとんどの時間は十分です。

[EDIT]あなたは(それを指摘するためferedに賛辞)shopt -s extglobと正規表現のサブセットを可能にすることができます。

詳細は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

の代わりに '。* /'が必要でしょう。 '$ a'は引用符で囲まれていないので、 ) –

+0

すべてのフォルダとそのサイズを表示したいと思います。だから、私は "。" ".." – Tech4Wilco

+0

私はあなたに本当の答えを加えました。 –

関連する問題