localize pastas de propriedade do usuário [fechado]

0

Eu tenho várias pastas compartilhadas e preciso descobrir se um usuário tem várias pastas lá. por exemplo:

/shared/release/
/shared/compile/
/shared/tags/
/shared/general/

Eu preciso de um script bash que liste essas pastas e me diga se um usuário tem mais de uma pasta de propriedade.

Usando o bash, como posso obter uma lista dessas pastas e determinar se um usuário possui mais de uma?

    
por Tal Drigov 28.09.2016 / 20:20

2 respostas

1

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 %p
find /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="c[$1]++" em uma lista separada por NUL.

  • 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="awk" salva o nome de cada diretório encontrado para esse usuário.

    • %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.

por 28.09.2016 / 20:27
2

Usando find :

find /shared -mindepth 1 -maxdepth 1 -type d -user <username>

Substitua <username> pelo nome de usuário real que você deseja procurar.

  • -maxdepth 1 impedirá a travessia recursiva, ou seja, só analisará o /shared directory

  • -mindepth 1 impedirá que o próprio diretório /shared seja listado, se pertencer a <username> , se você não quiser esse comportamento, remova essa opção

  • -type d indica que estamos interessados apenas em diretórios

  • -user <username> indica que estamos procurando os arquivos% de <username> (diretórios)

por 28.09.2016 / 20:23