find . -exec sh -c '
stat -c "%U %G" "$1" |
awk -F " " "\==\{exit 1}"
' sh {} \; -print
Ele executa stat para cada objeto, recupera seu proprietário e grupo; awk retornará o status de saída 0 apenas se forem diferentes. Na verdade, apenas estes são impressos.
Notas:
- O desempenho é baixo. Cada objeto precisa de seus próprios
sh,stateawkseparados. Eu tive algumas idéias para melhorar isso (find . -exec stat … {} + | awk …), mas não tenho certeza se posso torná-las robustas o suficiente para trabalhar com possíveis nomes de arquivos com novas linhas etc. Eu decidi jogar com segurança. Você pode usar-print0, se necessário. Essa abordagem também permite adicionar mais condições afind. - No meu Kubuntu
stat -c "%U %G"retornaUNKNOWNpara UIDs (ou GIDs) que não podem ser traduzidos para nomes. Se houver um usuárioUNKNOWNou um grupoUNKNOWN, isso vai interferir, eu acho. Um objeto que retornaUNKNOWN UNKNOWNé ingenuamente interpretado para ter proprietário e grupo correspondentes.