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

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

谢谢

最佳答案

默认情况下,Bash 不支持正则表达式作为文件名模式,仅支持 glob .

通常,以.开头的目录不包含在*/中。如果要包括保存的,请使用 .??*/(不包括 ...)。它并不完美(遗漏了 .X/),但在大多数情况下已经足够好了。

[编辑] 您可以使用 shopt -s extglob 启用正则表达式的子集(感谢 fered 指出这一点)。

参见 Bash Extended Globbing了解详情。

关于linux - Bash 脚本找不到 [^.],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7890892/

相关文章:

linux - 链接目录中的文件,使用类似于 cp 的简单命令

linux - 如何仅 grep 最近匹配的搜索字符串?

linux - Docker 环境变量未正确传递

linux - 使用 awk 按多列排序

c - 监控子进程的内存使用情况

linux - 使用 IP 队列时出现 Netlink 错误

Linux sleep 定时器+取消定时器+唤醒锁屏

linux - 内存分配中的锁争用——多线程与多进程

python - 使用 Python 获取鼠标增量! (在 Linux 中)

linux - Bash 脚本中有奇怪的特殊字符