我有这个脚本:
#!/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
我错过了什么?我不知道我的脚本有什么问题。
谢谢
最佳答案
默认情况下,Bash 不支持正则表达式作为文件名模式,仅支持 glob .
通常,以.
开头的目录不包含在*/
中。如果要包括保存的,请使用 .??*/
(不包括 .
和 ..
)。它并不完美(遗漏了 .X/
),但在大多数情况下已经足够好了。
[编辑] 您可以使用 shopt -s extglob
启用正则表达式的子集(感谢 fered 指出这一点)。
参见 Bash Extended Globbing了解详情。
关于linux - Bash 脚本找不到 [^.],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7890892/