当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

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

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

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

最佳答案

您可以使用以下 extglob 模式:

.@(!(.|))
  • . 首先匹配文字 .

  • @() 是一个 extglob 模式,将匹配里面的模式之一,因为我们里面只有一个模式,它会选择

  • !(.|) 是另一种 extglob 模式(嵌套),它匹配没有或一个 . 的任何文件;由于我们已经在开始时匹配了 .,整个模式将匹配所有以 . 开头的文件,除了 ...

extglob 在 Ubuntu 中默认在 bash 的交互式会话中启用。如果没有,请先启用它:

shopt -s extglob

例子:

$ echo .@(!(.|))
.bar .foo .spam

次佳答案

 GLOBIGNORE=".:.."

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

你也可以这样做

shopt -s dotglob

Gilles 🙂

第三种答案

您可以在此处使用 find 命令。例如类似的东西

find -type f -name ".*" -exec chmod 775 {} \;

这将找到隐藏文件并更改权限


编辑以包含@gerrit 的评论:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11989.html,未经允许,请勿转载。