Isso mostrará quais usuários têm mais de um diretório:
find /shared -type d -printf '%u\n' | sort | uniq -dc
Isso requer o find
do GNU para suportar a ação -printf
. Seu CentOS terá isso.
Isso listará os usuários com mais de um diretório e seus diretórios:
find /shared -type d -printf '%u %pfind /shared -type d -printf '%u\n' | sort | uniq -dc
' | awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="find /shared -type d -printf '%u %p%pre%' | awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="%pre%"
"
Para máxima flexibilidade, usamos saída separada por NUL de find
. Para trabalhar com isso, precisamos do GNU awk ou de versões recentes do mawk que suportem entradas separadas por NUL. Como você está usando o CentOS, isso deve ser bom.
Como funciona
-
find /shared -type d -printf '%u %p
/shared
'Isso diz ao find para procurar por diretórios em
%u
e imprimir seu dono,%p
, junto com o nome do diretório,awk '{c[$1]++; a[$1]=a[$1](a[$1]?"\n ":"")$0} END{for (user in c) if (c[user]>1) print c[user],a[user]}' RS="
em uma lista separada por NUL.c[$1]++
" -
a[$1]=a[$1](a[$1]?"\n ":"")$0}
Isso conta o número de diretórios que cada usuário possui e imprime um relatório para usuários com mais de um. Mais detalhadamente:
-
END{for (user in c) if (c[user]>1) print c[user],a[user]}
incrementa a contagem para o usuário especificado no primeiro campo de entrada. -
RS="
salva o nome de cada diretório encontrado para esse usuário.awk
" -
%code% imprime o relatório.
-
%code% informa %code% para usar entrada separada por NUL. Isso torna o processo seguro, mesmo que os nomes dos diretórios contenham novas linhas ou outros caracteres difíceis.
-