我应该如何处理所有隐藏文件?


22

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

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

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

当排除.和时,我应该如何遍历所有隐藏文件..

Answers:


20

您可以使用以下extglob模式:

.@(!(.|))
  • .文字匹配.的第一个

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

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

extglobbash在Ubuntu中默认启用了交互式会话。如果不是,请首先启用它:

shopt -s extglob

例:

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

这显然是我需要学习的很棒的东西!谢谢您的教
Zanna 2016年

@Zanna Glad我可以帮忙:)
heemayl

2
目的是@()什么?简单.!(.|)似乎完全一样。
凯尔·斯特兰德

1
我知道这已经很老了,但是我和@KyleStrand有相同的问题。在我的测试中,!(.|)工作原理相同。@()在这种情况下,有什么目的吗?
帕迪·兰道

爆炸字符是否定的吗?它没有提及,阅读您的解释后,我得到的印象是该模式与点和双点匹配,但是您清楚地描述了与起始点匹配的文件,除了那两个。
用户未知

20
 GLOBIGNORE=".:.."

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

你也可以

shopt -s dotglob

吉尔斯:)


9

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

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

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


编辑以包含@gerrit的评论:

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

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


4
您可能要在-maxdepth 1此处添加一个,以使其更接近问题和其他答案中的行为。
Gerrit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.