Bash globbing - 针对一些特定情况的autoexpand?

时间:2009-10-19 00:39:09

标签: bash filenames glob expansion

我知道通配符*(本身)会以这样的方式扩展,即“当前文件夹中的所有非隐藏文件”,其中隐藏文件是以句点为前缀的文件。

我认为有两个用例很有用,但我不知道如何正确执行:

  1. 如何为...播放“当前文件夹中的所有文件,包括隐藏文件,但不包括...”?

  2. 你怎么能为......“当前文件夹中的所有隐藏文件(以及仅隐藏文件),但不包括...”?

    < / LI>

6 个答案:

答案 0 :(得分:15)

要展开paviums answer并回答问题的第二部分,除了...之外的所有文件都可以这样指定:

{.[!.]*,*}

根据您的确切用例,最好设置dotglob shell选项,以便bash默认包含*扩展中的dotfiles:

$ shopt -s dotglob
$ echo *
.tst

答案 1 :(得分:3)

Bash Cookbook建议解决您的第二个要求。

.[!.]*

指定“点文件”,但避免使用...

当然,ls-A选项,但这不是通配。

答案 2 :(得分:1)

满足您的第一个案例:

echo {.,}[^.]*

echo {.,}[!.]*

修改

这个似乎得到了一切,但比 ephemient 更短

echo {.*,}[^.]*

答案 3 :(得分:1)

结合sth和pavium答案

# dot files but avoiding . and ..
.[!.]*

# all files but avoiding . and .. 
{.[!.]*,*}

答案 4 :(得分:0)

“所有文件”和“所有隐藏文件”是指仅文件,还是指文件和目录? Globbing对名称进行操作,而不管它属于文件或目录。其他人为使用globbing查找隐藏名称和非隐藏名称提供了很好的答案,但您可能希望转向find命令作为可以区分类型的更简单的替代方法。

要查找“当前文件夹中的所有文件,包括隐藏文件,但不包括。或..”:

find . -type f

查找“当前文件夹中的所有文件和目录,包括隐藏文件,但不包括。或..”:

find . ! -name .

要查找当前文件夹中的所有隐藏文件(以及仅隐藏文件),但不包括。或..“:

find . -name '.*' -type f

要查找当前文件夹中的所有隐藏文件和目录(以及仅隐藏文件和目录),但不包括。或..“:

find . -name '.*' ! -name .

请注意,默认情况下,find也将通过子目录进行递归,因此如果您想将其限制为仅可以使用的当前目录:

find . -maxdepth 1 -type f

答案 5 :(得分:0)

所以,即使这是旧的 - 没有使用shopt,这似乎没有完全回答。但是,到目前为止扩展到已经给出的答案,这些对我有用:

1:

{*,.[!.]*,..?*}

2:

{.[!.]*,..?*}