Zan*_*nna 23 command-line bash files wildcards
我想对chown目录中的所有隐藏文件执行一些操作(比如)。
我知道这.*是不是一个好主意,因为它也将查找当前.和父..目录(我知道,rm将无法进行操作.和..,但其他命令,包括chown和chmod,会很乐意生效)
但是我所有的隐藏文件都有不同的名字!
我应该如何在排除.和的同时搜索所有隐藏文件..?
Rin*_*ind 21
GLOBIGNORE=".:.."
Run Code Online (Sandbox Code Playgroud)
隐藏 . 和 .. 目录。这也设置了dotglob选项:*匹配隐藏和非隐藏文件。
你也可以这样做
shopt -s dotglob
Run Code Online (Sandbox Code Playgroud)
hee*_*ayl 20
您可以使用以下extglob模式:
.@(!(.|))
Run Code Online (Sandbox Code Playgroud)
.文字匹配.的第一个
@()是一个extglob模式,将匹配里面的一个模式,因为我们里面只有一个模式,它会选择那个
!(.|)是另一种extglob模式(嵌套),它匹配任何没有或一个的文件.;正如我们.在开始时已经匹配的那样,整个模式将匹配所有以.except.和开头的文件..。
extglobbash在 Ubuntu 中默认启用交互式会话。如果没有,请先启用它:
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
例子:
$ echo .@(!(.|))
.bar .foo .spam
Run Code Online (Sandbox Code Playgroud)
您可以find在此处使用命令。例如类似的东西
find -type f -name ".*" -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)
这将找到隐藏文件并更改权限
编辑以包含@gerrit 的评论:
find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)
这将限制在当前目录的顶部搜索,而不是递归搜索。