将两个"查找"命令与不同的"exec"组合在一起



有没有办法在Linux bash上组合这两个命令?

> find web/ -type d -exec chmod 755 {} ;
> find web/ -type f -exec chmod 644 {} ;

这两个命令都需要一段时间,我想知道这是否会更有效?

您可以将它们与-o组合,但这不会加快速度;我敢肯定,大部分速度减慢是由于为每个目录和文件创建了一个单独的chmod进程。您可以使用-exec ... +(而不是-exec ... ;(在一大批目录/文件上运行单个命令实例:

find web ( -type d -exec chmod 755 {} + ) -o ( -type f -exec chmod 644 {} + )

但还有一个更快的方法。CCD_ 5支持";符号";模式以及数字,如果有意义的话(即主要在目录上,而不是在文件上(,这些模式可以包括用于执行的X。这样,您就可以在整个目录树上运行一个递归chmod,并让它计算出在哪些项上使用哪些排列:

chmod -R u=rwX,go=rX web

(不过,这可能有一个问题:如果任何文件已经具有执行权限,chmod将认为它应该具有执行权限并保留它。(

最简单的是:

find web/ -type d -exec chmod 755 {} ; -or -type f -exec chmod 644 {} ; 

正如@KamilCuk有用地建议的那样,您也可以将这种符合POSIX的语法与-o而不是-or:一起使用

find web/ -type d -exec chmod 755 {} ; -o -type f -exec chmod 644 {} ; 

一个可能的解决方案是使用&&运算符组合它们。

find web/ -type d -exec chmod 755 {} ; && find web/ -type f -exec chmod 644 {} ;

这种方法没有速度优势。

最新更新