Я буду использовать синтаксис gnu find для флага -perm в этом примере:
В основном - если вы выбрасываете дурацкие расширения, такие как ACL, у вас есть 3 варианта - владелец, группа и «другие» права на запись. Похоже, работа для цикла.
Существует много возможностей для оптимизации этого, но я оставлю это кому-то еще ... Кроме того, я никогда не могу вспомнить все детали поиска и пересечения файловых систем и тому подобную чепуху. Также убедитесь, что вывод групп такой же, как в моей тестовой системе Linux.
$ groups snoopy
snoopy : snoopy doghouse linus admin wwI woodstock
$
Это грубый пример того, как вы найдете файлы, доступные для записи пользователю. Это будет происходить при запуске от имени любого пользователя, но если вы запустите его как пользователь не-uid0, вы найдете только то, что находится в каталогах, к которым у пользователя, запустившего скрипт, есть права как на чтение, так и на выполнение.
#!/bin/sh
user=snoopy
directory=/
# first files owned by the user and writable
find "$directory" -follow -user "$user" -perm /u+w 2> /dev/null
# now for files that are group writable with the user in that group
for groups in $(groups snoopy 2> /dev/null | cut -f2 -d:)
do
find "$directory" -follow -group "$user" -perm /g+w 2> /dev/null
done
# now for everything else
find "$directory" -follow -perm /o+w 2> /dev/null