我应该如何搜索所有隐藏文件?

Zan*_*nna 23 command-line bash files wildcards

我想对chown目录中的所有隐藏文件执行一些操作(比如)。

我知道这.*不是一个好主意,因为它也将查找当前.和父..目录(我知道,rm将无法进行操作...,但其他命令,包括chownchmod,会很乐意生效)

但是我所有的隐藏文件都有不同的名字!

我应该如何在排除.和的同时搜索所有隐藏文件..

Rin*_*ind 21

 GLOBIGNORE=".:.."
Run Code Online (Sandbox Code Playgroud)

隐藏 . 和 .. 目录。这也设置了dotglob选项:*匹配隐藏和非隐藏文件。

你也可以这样做

shopt -s dotglob
Run Code Online (Sandbox Code Playgroud)

吉尔 :)

  • IMO 这比公认的答案更好。更容易记住,更加直观,并且如果愿意的话,可以将其填充到“.bashrc”中以使其永久化(我知道我几乎从不希望“*”表示“仅限非点文件”)。 (3认同)

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)

  • `@()` 的目的是什么?简单的 `.!(.|)` 似乎工作相同。 (2认同)

Way*_*Yux 9

您可以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)

这将限制在当前目录的顶部搜索,而不是递归搜索。

  • 您可能希望在此处添加“-maxdepth 1”,以便更紧密地匹配问题和其他答案中的行为。 (4认同)