我有这个脚本:
#!/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)
默认情况下,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 '*/')