Globbing不适用于否定和两个通配符

时间:2014-03-04 16:14:25

标签: wildcard glob negation

我有这个文件结构

user@laptop:/my/folder$ ls
control       changelog  patches   postrm  source
copyright.in  mime       postinst  rules

并希望列出名称中没有点的所有文件。不要用grep。反向看起来像:

user@laptop:/my/folder$ ls *[.]*
copyright.in

但是当我尝试添加否定(^或!)以实现我的目标时,它不起作用:

user@laptop:/my/folder$ ls *[^.]*
control  copyright.in  changelog  mime  postinst  postrm  rules

patches:
series                                      03-include-unistd-for-kfreebsd
01-manpages-in-section-1-not-in-section-1l  04-unzip60-alt-iconv-utf8
02-branding-patch-this-is-debian-unzip      04-unzip60-alt-iconv-utf8~

source:
format

在输出中列出了copyright.in,这不是我想要的。当我写?而不是*,它有效。:

user@laptop:/my/folder$ ls *[^.]??
control  changelog  mime  postinst  postrm  rules

patches:
series                                      03-include-unistd-for-kfreebsd
01-manpages-in-section-1-not-in-section-1l  04-unzip60-alt-iconv-utf8
02-branding-patch-this-is-debian-unzip      04-unzip60-alt-iconv-utf8~

source:
format

有人知道如何使用globbing来制作目录中没有点名的文件列表吗?

1 个答案:

答案 0 :(得分:2)

(对不起,最后一个答案,我完全误解了这个问题。)

您可以使用grep

[me@localhost ~]$ ls | grep -v '\.'

find

[me@localhost ~]$ find . -maxdepth 1 -not -name '*\.*' -printf '%f\n'

甚至ls

[me@localhost ~]$ ls -1I '*.*'

所有产生相同的输出。 (-1中的ls不是必需的,只是强制每行一个文件名,使其输出与其他两个命令相同。)