查找文件并更改权限,忽略目录

Posted

技术标签:

【中文标题】查找文件并更改权限,忽略目录【英文标题】:Find file and change permissions, ignore directories 【发布时间】:2018-10-17 23:14:24 【问题描述】:

我正在尝试编写一个查找命令,该命令在目录中搜索特定用户的文件并仅更改这些权限。目前我正在使用以下内容:

ssh $DEST_SERV "find $DEST_LOCATION -type f -user a_user -exec chmod 644  \;" 

这可以正常工作,但是当尝试解析任何不属于执行命令的用户的子目录时会导致以下问题。

发现:0652-081 无法将目录更改为 /usr/local/application/download/sub_directory: : 文件访问权限不允许指定的动作。

有没有办法可以修改它以仅检查命名目录和用户文件,并忽略其中的任何子目录?

【问题讨论】:

你不必改变任何东西,只需抑制stderr:find ... 2>/dev/null 【参考方案1】:

Lorinczy 有一个有效的观点。如果只是困扰您的消息,只需将其发送到 /dev/null。但是,还有一个更大的问题可能是您想要解决的问题,那就是如果有目录,您不想浪费时间去查看这些目录。

您的问题的答案是 -prune。但是,对我来说,很难弄清楚如何使用它。这是一个例子。我创建了一些文件,如果我只是找到,我会找到三个文件:

find . -name a -print
./a
./b/a
./c/a

如果我添加 -prune 以不去匹配 [a-z] 的目录,那么我得到:

find . -type d -name '[a-z]' -prune -o -name a -print
./a

find . -type d -regex '\./.*' -prune -o -name a -print
./a

相反,如果您想要访问用户可以访问的目录,而不是访问您无法访问的目录,您可以通过 find 执行此操作,但使用 -perm 来确定会是一个很长的复杂命令“手动”目录,用户可以向下搜索,然后 - 修剪用户无权搜索的目录。

【讨论】:

谢谢@Lorinczy 和 Pedz,我已决定使用您的建议来抑制 stderr,它似乎也能按我的意愿工作!

以上是关于查找文件并更改权限,忽略目录的主要内容,如果未能解决你的问题,请参考以下文章

shell find命令使用简介

shell find命令使用简介

Linux find

31个实用find命令的案例

Linux find命令详解

Jenkinsfile,“查找”,忽略一些隐藏目录和其他文件夹