如何使用单个 find 命令更改除 1 个文件夹之外的所有子目录的权限?

如何使用单个 find 命令更改除 1 个文件夹之外的所有子目录的权限?

我需要更改除 1 个文件夹之外的所有子文件夹中的文件夹和文件权限。目前,我正在运行几个 find/exec 命令来使其工作。

e.g. find /mystuff/temp/videos -type d -exec chmod 777 {} \;

文件夹结构类似于(具有我需要的必要权限):

mystuff
    -> folder1 (ignored)
        -> subfolder1 (permissions changed)
    -> folder2 (permissions changed)
    -> folder3 (permissions changed)

是否可以?如果是,用什么 find 等命令?

答案1

尝试:

find /mystuff/temp/videos -type d ! -name 'folder1' -exec chmod 777 {} +

请注意,您不应该设置 777 权限,这是安全方面的一个大漏洞。

答案2

您可以添加-wholename带有 not ( !) 的测试来删除该目录。例如:

find /mystuff/temp/videos ! -wholename 'mystuff/folder' -type d -exec chmod 777 {} \;

从手册页:

   -wholename pattern
      File name matches shell pattern pattern.  The metacharacters  do
      not treat '/' or '.' specially; so, for example,
        find . -wholename './sr*sc'
      will  print an entry for a directory called './src/misc' (if one
      exists).

*如果您使用通配符 ( ) 来保护模式免受 shell 的影响,则该模式需要用引号引起来。

相关内容