Linux Bash脚本找不到[^。]
我有这个剧本:Linux Bash脚本找不到[^。],linux,bash,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 我错过了什么?我不知道我的剧本怎么了 谢谢你所说的[^
#!/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
我错过了什么?我不知道我的剧本怎么了
谢谢你所说的
[^.]
是什么意思?如果您的意思是不包括点的正则表达式,那么它相当于*/
在阅读时也;一美元一个;完成
或多或少是不可操作的
编辑:根据评论:
(shopt -s dotglob ; eval du -s '*/')
默认情况下,Bash不支持regexp作为文件名模式 通常,以
开头的目录不包括在*/
中。如果要包括保存的代码,请使用?*/
(不包括
和。
)。它并不完美(错过了.X/
),但在大多数情况下已经足够好了
[EDIT]您可以使用shopt-s extglob
启用regexp的一个子集(很荣幸指出这一点)
有关详细信息,请参阅。while循环唯一要做的事情是将空格序列压缩到单个空格(因为
$a
未被引用),我希望显示所有文件夹及其大小。所以我不想要“.”和“.”。我明白了,我为您添加了真正的答案。您可能想要*/
而不是[^.]*/
bash
(版本≧4) 当然可以处理regex globbing:请参阅: