como posso alterar as permissões para todos os subdiretórios, exceto para 1 pasta usando um único comando find?

2

Eu preciso alterar as permissões de pasta e arquivo em todas as subpastas, exceto para uma pasta. Atualmente, estou executando vários comandos find / exec para fazê-lo funcionar.

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

A estrutura de pastas seria algo como (com as permissões necessárias que eu preciso):

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

É possível? Se sim, com que find etc comando?

    
por mrjayviper 08.11.2014 / 09:13

2 respostas

2

Tente:

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

Uma observação de que você não deve definir a permissão do 777, é um grande buraco na segurança.

    
por 08.11.2014 / 09:21
2

Você pode adicionar o teste -wholename com um não ( ! ) para remover o diretório. Por exemplo:

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

Da página do manual:

   -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).

O padrão precisa estar entre aspas se você usar curingas ( * ) para protegê-lo do shell.

    
por 08.11.2014 / 09:33

Tags