Trabalhar fora do que um usuário pode fazer é difícil se você não for esse usuário. Você pode testar várias coisas (é proprietário, mesmo grupo, etc), mas a ACL pode se aplicar, pode não haver permissões na montagem, quem sabe. É difícil.
Se você puder transformar esse usuário, poderá test -w <path>
para ver se ele pode escrever. Isso não é tão rápido quanto apenas olhar para o inode, mas é possível com sudo
.
sudo -u oli test -w <path> && echo "HOORAY"
Podemos, então, dividir isso no back-end de find
. Em vez de usar apenas -exec
para mudar para o usuário oli repetidas vezes (veja as revisões anteriores), colocamos tudo em uma instância de xargs executando como oli. Isso é muito mais rápido.
sudo find / -type d -print0 | sudo -u oli xargs -0 -I{} sh -c 'test -w "$0" && echo "$0"' {}
Uma versão um pouco otimizada (mas visualmente mais flácida) envolve a minimização da quantidade de subshells que os xargs executam, canalizando um fluxo de caminhos para um número baixo de subshells bash. Isso é, sem dúvida, mais rápido para grandes pesquisas.
sudo find / -type d -print0 | sudo -u oli xargs -0 sh -c 'for p; do [ -w "$p" ] && echo "$p"; done' -