Bem, eu ainda não tenho certeza se entendi o problema (provavelmente não é sua culpa!), mas aqui estão algumas idéias:
1) Use a opção -print0
de find
(e opções similares em grep
, xargs
, etc.) para lidar com caracteres especiais em nomes de arquivos.
2) Pode ser necessário algum script para juntar tudo, mas o stat retornará a string de permissão octal de um arquivo. Então, tudo que você precisa fazer é dividi-lo em três caracteres separados (por exemplo, 775 - > 7 7 5) (usando modificadores de parâmetro bash ou processamento de string no idioma / ferramenta de sua escolha) e se o segundo ou terceiro caractere corresponder o primeiro, então você tem permissões idênticas para o proprietário e grupo ou outro.
A melhoria aqui é que você está vendo todas as três permissões de uma só vez, em vez de enumerar todas as permutações. Eles são o mesmo trio ou não são. Vai demorar um pouco mais para manipular as strings de permissão com mais de 3 caracteres (para coisas como sticky bits, etc.), mas ainda é basicamente um teste igual ou não igual para encontrar os arquivos em questão.
Não tenho tempo para descobrir os detalhes, mas comecei vendo se poderia criar um script que:
1) Obtenha e divida as permissões usando stat
e verifique se há correspondências de permissão. Se houver, imprima o nome do arquivo (possivelmente o caminho completo) e as permissões ou sinalizadores para o que precisa ser alterado. Caso contrário, descarte esse nome de arquivo.
2) canalize a saída de find
para esse script ou acesse-a com a opção find
-exec
.
3) Então, você teria uma lista de apenas os arquivos que precisam ser modificados junto com o que cada um precisa e isso pode ser tratado com scripts simples.