Execute dois comandos baseados na saída do primeiro

2

Eu sou novo em comandos unix, mas tenho uma necessidade. Eu tenho um ambiente misto Win / Mac onde eu uso o Win AD para contas de usuário e o Mac como armazenamento de arquivos.

Existe um comando no Mac que cria automaticamente as pastas base para os usuários e define as permissões apropriadas 'createhomedir -s' na minha situação. A saída deste comando é:

creating home directories for (cloud.mc.net.mackillop)
created (/Network/Servers/cloud.mc.net.mackillop/data/18goodki/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/18langre/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/16gibsga/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/17gibssa/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/99bowmam/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/99newtal/files)
created (/Network/Servers/cloud.mc.net.mackillop/data/99daypa/files)

O que eu preciso fazer é configurar permissões adicionais para essas pastas domésticas recém-criadas, fornecer acesso de leitura / gravação, bem como _www (host Apache), pois usamos OwnCloud.org para fornecer acesso à nuvem baseado na web. aos arquivos dos usuários.

Estes são os dois comandos que eu corro para conseguir isso:

sudo chmod -R +ai "_www allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" data

sudo chmod -R +ai "ittech allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" data

A execução desses dois comandos em toda a pasta 'data' de todos os usuários e subpastas leva muito tempo (973 contas de usuário!) e realmente desacelera o servidor. O que eu gostaria de fazer é executar esses dois comandos em usuários recém-criados a partir do primeiro comando para reduzir muito o tempo e a sobrecarga.

Eu tenho lido no grep, awk etc, mas não tenho certeza de como conseguir isso.

Então, basicamente, eu quero que createhomedir -s seja executado, então extraia cada nome de usuário da saída desse comando e use esses nomes de usuário para executar os dois chmods no lugar da pasta 'data' (/ data /% USERNAME% em vez disso).

    
por user36541 05.04.2013 / 00:51

1 resposta

3

Fácil o suficiente ... apenas envolva-o da seguinte forma (ressalva: estamos assumindo que o bit create é bem-sucedido e que a saída de createhomedir está no STDOUT ao invés de STDERR):

for i in $(createhomedir -s | grep -o 'data/[^\/]*' )
do
  echo sudo chmod -R +ai "_www allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit"  $i
  echo sudo chmod -R +ai "ittech allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" $i
done

Se você está feliz com a sanidade do comando, retire os "echo" s.

    
por 05.04.2013 / 01:54

Tags