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