我知道通配符*
(本身)将以这样的方式扩展,它意味着“当前文件夹中的所有非隐藏文件”,隐藏文件是以句点为前缀的文件。
我认为有两个用例很有用,但我不知道如何正确执行:
你怎么能glob...“当前文件夹中的所有文件,包括隐藏文件,但不包括
.
或..
”?你怎么能glob...“当前文件夹中的所有隐藏文件(并且只有隐藏文件),但不包括
.
或..
”?
要扩展paviums 答案并回答问题的第二部分,除.
和之外的所有文件都..
可以这样指定:
{.[!.]*,*}
根据您的确切用例,最好设置dotglob
shell 选项,以便 bash*
默认在扩展中包含点文件:
$ shopt -s dotglob
$ echo *
.tst
结合 sth and pavium 答案
# dot files but avoiding . and ..
.[!.]*
# all files but avoiding . and ..
{.[!.]*,*}
为了满足您的第一个案例:
echo {.,}[^.]*
或者
echo {.,}[!.]*
编辑:
这似乎得到了一切,但比ehemient的短
echo {.*,}[^.]*
“所有文件”和“所有隐藏文件”是指仅文件,还是指文件和目录?Globbing 对名称进行操作,而不管它属于文件还是目录。其他人对使用 globbing 查找隐藏名称和非隐藏名称给出了很好的答案,但是您可能希望将find
命令作为可以区分类型的更简单的替代方法。
要查找“当前文件夹中的所有文件,包括隐藏文件,但不包括 . 或 ..”:
find . -type f
要查找“当前文件夹中的所有文件和目录,包括隐藏文件,但不包括 . 或 ..”:
find . ! -name .
要查找“当前文件夹中的所有隐藏文件(仅隐藏文件),但不包括 . 或 ..”:
find . -name '.*' -type f
要在当前文件夹中查找“所有隐藏文件和目录(仅隐藏文件和目录),但不包括 . 或 ..”:
find . -name '.*' ! -name .
请注意,默认情况下 find 也将通过子目录递归,因此如果您想将其限制为仅可以使用的当前目录:
find . -maxdepth 1 -type f
所以,即使这是旧的 - 不使用 shopt,这似乎并没有得到完全回答。但是,扩展到目前为止已给出的答案,这些对我有用:
1:
{*,.[!.]*,..?*}
2:
{.[!.]*,..?*}