以递归方式对具有名称的目录运行命令

以递归方式对具有名称的目录运行命令

我在 AIX 中有以下目录结构。

codeRepo/REPO1/AREA1/objects
codeRepo/REPO1/AREA2/SUBAREA1/objects
codeRepo/REPO1/AREA2/SUBAREA2/objects

从 codeRepo 我想在树中的chown myUser *每个目录上运行。objects正如您所看到的,不同的位置有不同的对象目录。

答案1

如果您只想 chown 目录(而不是子文件),请使用find -exec,如下所示:

find -type d -name objects -exec chown myUser {} \;

执行此操作: -type d仅选择目录仅 -name objects查找名称完全为“对象”的目录, 对找到的每个路径-exec chown myUser {} \;执行chown myUser {}(用路径替换 {})

如果您还想删除chown里面的所有文件,只需替换chownchown -R.

答案2

你几乎回答了你自己的问题..答案是使用递归选项 -R

运行命令sudo chown -R richie codeRepo/(假设您的用户名是 richie)

这将递归地将每个文件/文件夹设置为您作为所有者,但这样做;尽可能远的树,所以更多的是大锤方法。

答案3

使用bash选项globstar可遍历任意深度**

codeRepo

shopt -s globstar
chown myUser REPO1/AREA*/**/objects

AREA为了精确起见,如果名称后面只有一位数字(字符) ,则使用?来表示单个字符:

chown myUser REPO1/AREA?/**/objects

同样,对于两个字符:

chown myUser REPO1/AREA??/**/objects

相关内容