Não é possível Bash chgrp GROUP / home / * / SOMEFILE / Como fazer isso?

0

Portanto, estou definindo um código que alterará o proprietário do grupo do arquivo para um grupo específico.

PS existem mais de 10 usuários, com a mesma estrutura de pastas e arquivos, e eu quero mudar a propriedade de um arquivo específico em cada pasta.

Para que, se alguém editar o arquivo, dentro de 10 segundos (usando cron e sleep function), ele alterará o proprietário do grupo para um grupo específico.

aqui está o meu código que eu usei e criei um arquivo chamado owner.sh

chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10
chgrp www-data /home/*/private/FILE.TXT
sleep 10

E isso deve funcionar, mas quando tento dar um golpe,

bash owner.sh 

diz que /home/*/private/FILE.TXT não existe, mas se eu rodar manualmente é

chgrp www-data /home/*/private/FILE.TXT

, ele entra na pasta de cada usuário e altera o grupo desse arquivo específico.

Então, como fazer isso funcionar do jeito que eu quero?

    
por Harsh 26.04.2016 / 17:52

1 resposta

0

tente:

#!/bin/bash
while true; do
    for user in $(ls /home); do
        chgrp www-data /home/${user}/private/FILE.TXT
    done
    sleep 10
done

O loop infinito é para ignorar a limitação do cron de 1 minuto para repetir um trabalho. torne-o executável:

chmod +x /PATH/TO/owner.sh

E apenas execute-o sem um cronjob.

Além disso, se você quiser apenas reagir à modificação de um arquivo e modificar diretamente a propriedade desse arquivo, use as ferramentas inotify:

#!/bin/bash
for user in $(ls /home); do
    inotifywait -mqe close_write /home/${user}/private/FILE.TXT --format %f | while IFS= read -r file; do chgrp www-data $file; done
done

Basta executá-lo uma vez

    
por 26.04.2016 / 18:50