Você precisa procurar por arquivos que são RW por todos OU são RW pelo usuário uid OU que são RW por todos os grupos dos quais o usuário é membro. Mas é um pouco mais complicado que isso. Como apontado por aqui por Stephane Chazelas, se um arquivo for de propriedade de um usuário, então SOMENTE o proprietário perms count, e se um arquivo pertencer a um grupo do qual o usuário é membro, então apenas o grupo perms count.
Portanto, precisamos verificar "owner = RW ou (não proprietário e grupo = rw) ou (não proprietário e não grupo e outro = rw)"
Você pode obter uma lista dos lances de grupo dos quais um usuário é membro com id -G
. Isso pode ser usado para construir uma linha de comando de localização com a substituição do comando shell padrão.
Minha resposta original tinha um one-liner, mas esse trabalho é complexo demais para querer fazer em um one-liner. Aqui está um script de shell bash que faz o trabalho.
#! /bin/bash
U="$1" # username to do perm search on - e.g. popo
TOPDIR="$2" # starting directory for search - e.g. /Users/Me/Desktop
# permissions to search for - defaults to "rw"
PERMS=${3:-rw}
# permission bits "style". "/"=ANY or "-"=ALL. defaults to /
#
# see find(1) and search for '-perm -mode' or '-perm /mode' for
# details on how this works.
PSTYLE=${4:-/}
# construct a find expression specifying all groups that the user
# is a member of
GIDS="$(for i in $(id -G "$U"); do echo -n " -gid $i -o "; done)"
GIDS=$(echo "$GIDS" | sed -e 's/ -o $//') # strip trailing " -o "
find "$TOPDIR" \
\( -user "$U" -perm ${PSTYLE}u=$PERMS \) \
-o \( -not -user "$U" -a \( $GIDS \) -perm ${PSTYLE}g=$PERMS \) \
-o \( -not -user "$U" -not \( $GIDS \) -perm ${PSTYLE}o=$PERMS \)
Este script deve ser executado como root. Outros usuários podem não ter as permissões necessárias para procurar em todos os diretórios que o popo pode.
Nota: Eu testei isso em um sistema Debian Linux usando as últimas versões de id
do GNU Coreutils e find
do GNU findutils. As implementações do Mac de id
e find
podem ser diferentes, não tenho um Mac disponível no momento para testar. Se for diferente, verifique as páginas de manual do Mac em relação a id
e find
- as coisas que precisam ser modificadas para um Mac são as opções -G
e -u
para id
e -perm /
ou '-perm -' opções de find
.