Se você preferir não chamar um subshell para cada arquivo, este refinamento da resposta do jlliagre faz tudo com find
predicados, desde que não haja ACLs para torná-lo ainda mais complicado. O manuseio correto de diretórios legíveis mas não pesquisáveis é deixado como um exercício. Se você ainda não viu o #!
thingy, significa "não tente copiar tudo isso na linha de comando; em vez disso, coloque-o em um arquivo, textualmente, chmod +x
it e invoque-o como ./nameoffile <directory>
. "
#! /usr/xpg4/bin/sh
PATH=/usr/local/bin:/usr/xpg4/bin:/usr/bin:/bin
export PATH
me="-user $(id -u)"
my_groups="( -group $(id -G | sed 's/ / -o -group /g') )"
prune_me="( ( $me ! -perm -0400 ) -prune )"
prune_group="( ( ! $me $my_groups ! -perm -0040 ) -prune )"
prune_other="( ( ! $me ! $my_groups ! -perm -0004 ) -prune )"
find "$@" $prune_me -o $prune_group -o $prune_other -o -print