Bash globbing-在一些特定情况下自动展开?
我知道通配符Bash globbing-在一些特定情况下自动展开?,bash,filenames,glob,expansion,Bash,Filenames,Glob,Expansion,我知道通配符*(本身)将以这样一种方式展开,即“当前文件夹中的所有非隐藏文件”,隐藏文件的前缀为句点 我认为有两个用例是有用的,但我不知道如何正确执行: 你怎么能为。。。当前文件夹中的所有文件,包括隐藏文件,但不包括或。 你怎么能为。。。“当前文件夹中的所有隐藏文件(仅隐藏文件),但不包括或。” 建议解决您的第二个需求 .[!.]* 作为指定“点文件”的一种方式,但避免使用和。 当然,ls有-A选项,但这不是全局选项。要展开并回答问题的第二部分,除了和之外的所有文件都可以这样指定。: {.[!
*
(本身)将以这样一种方式展开,即“当前文件夹中的所有非隐藏文件”,隐藏文件的前缀为句点
我认为有两个用例是有用的,但我不知道如何正确执行:
或。
或。
”.[!.]*
作为指定“点文件”的一种方式,但避免使用
和。
当然,ls
有-A
选项,但这不是全局选项。要展开并回答问题的第二部分,除了
和之外的所有文件都可以这样指定。
:
{.[!.]*,*}
根据具体的用例,最好设置dotglob
shell选项,以便bash在默认情况下在*
的扩展中包含点文件:
$ shopt -s dotglob
$ echo *
.tst
要满足您的第一个需求,请执行以下操作:
echo {.,}[^.]*
或
编辑:
这一个似乎得到了一切,但比短暂的短
echo {.*,}[^.]*
“所有文件”和“所有隐藏文件”是指仅文件,还是指文件和目录?Globbing对名称进行操作,而不管它是否属于文件或目录。其他人对使用globbing查找隐藏名称和非隐藏名称给出了很好的答案,但您可能希望使用find
命令作为一种更简单的方法来区分这些类型
要查找“当前文件夹中的所有文件,包括隐藏文件,但不包括.或..”:
要查找“当前文件夹中的所有文件和目录,包括隐藏文件,但不包括.或..”:
要查找“当前文件夹中的所有隐藏文件(仅隐藏文件),但不包括.或..”:
要查找“当前文件夹中的所有隐藏文件和目录(仅隐藏文件和目录),但不包括.或..”:
请注意,默认情况下,find也将在子目录中递归,因此,如果要将其限制为仅可使用的当前目录,请执行以下操作:
find . -maxdepth 1 -type f
把某物和答案结合起来
# dot files but avoiding . and ..
.[!.]*
# all files but avoiding . and ..
{.[!.]*,*}
因此,即使这是旧的-没有使用shopt,这似乎没有得到充分的回答。但是,根据迄今为止给出的答案,这些对我来说很有用: 1:
{*,[!.]*,…?*}
2:
{....]*,…?*}
touch..blah;echo{.,}[!.]*| grep blah
失败。触摸..等等;echo{.,}[^.]*| grep blah
失败。{.*,[^.]*,[^.]*}
无论dotglob
设置如何,都可以工作,避免丢失以两个点开头的文件名,而这里的每个人似乎都忽略了这一点。@ephiement:如果没有以两个点开头的文件名,这会给我一个虚假的匹配。*。
find . ! -name .
find . -name '.*' -type f
find . -name '.*' ! -name .
find . -maxdepth 1 -type f
# dot files but avoiding . and ..
.[!.]*
# all files but avoiding . and ..
{.[!.]*,*}