我知道通配符*
(本身)会以这样的方式扩展,即“当前文件夹中的所有非隐藏文件”,其中隐藏文件是以句点为前缀的文件。
我认为有两个用例很有用,但我不知道如何正确执行:
如何为...播放“当前文件夹中的所有文件,包括隐藏文件,但不包括.
或..
”?
你怎么能为......“当前文件夹中的所有隐藏文件(以及仅隐藏文件),但不包括.
或..
”?
答案 0 :(得分:15)
要展开paviums answer并回答问题的第二部分,除了.
和..
之外的所有文件都可以这样指定:
{.[!.]*,*}
根据您的确切用例,最好设置dotglob
shell选项,以便bash默认包含*
扩展中的dotfiles:
$ shopt -s dotglob
$ echo *
.tst
答案 1 :(得分:3)
答案 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:
{.[!.]*,..?*}