Bash脚本找不到[^。]

时间:2011-10-25 14:30:59

标签: linux 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

我错过了什么?我不知道我的剧本有什么问题。

由于

2 个答案:

答案 0 :(得分:2)

默认情况下,Bash不支持regexp作为文件名模式,仅glob

通常,以.开头的目录不包含在*/中。如果要包含保存的,请使用.??*/(不包括...)。它并不完美(错过.X/)但在大多数情况下都很好。

[编辑] 您可以使用shopt -s extglob启用正则表达式的子集(荣誉为fered,以便将其指出)。

有关详细信息,请参阅Bash Extended Globbing

答案 1 :(得分:0)

[^.]你的意思是什么?如果你的意思是正则表达式不包括点,那么它相当于*/

同样while read a; do echo $a; done或多或少是无操作。

编辑:基于评论:

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