chmod arquivos com grupo - erro em arquivos com (

0

Eu tenho a necessidade de chmod arquivos que estão em um determinado grupo. Eu criei este constructo:

find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;

Isso funciona, mas falha quando o nome do arquivo tem um colchete (ou) nele.

Alguma idéia?

    
por jdog 15.02.2017 / 22:19

2 respostas

0

Você precisa definir a variável IFS como $(echo -en "\n\b") , por exemplo:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;
IFS=$SAVEIFS
    
por 15.02.2017 / 22:45
2

A maneira como você está usando a {} interpolação deixa o nome do arquivo sem aspas, por isso é um pouco como executar chmod u=rw some(filename).txt , que falhará da maneira que você descreveu.

Uma solução é mover {} de uma string entre aspas para que find possa manipulá-la corretamente.

Outro problema é que você parece estar dividindo o comando chmod , com parte dele dentro do su e parte dele fora. (Demonstre isso substituindo sh por echo .) O resultado é um comando quebrado e não tenho certeza do que você está tentando alcançar.

Tente isso (remova o echo quando tiver certeza de que está fazendo o que deseja):

su -c "
    find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \;
"

Você realmente pretende aplicar um chmod recursivo a cada diretório que tenha o grupo groupname ? Talvez você deva considerar -type d no conjunto de predicados.

    
por 15.02.2017 / 22:44