Используйте -maxdepth 0
, чтобы соответствовать только самому элементу. Таким образом:
while IFS=: read _ _ _ _ _ home _; do
[[ -d $home ]] || continue # skip directories that do not actually exist
find "$home" -maxdepth 0 -perm -o+w
done </etc/passwd | tee /tmp/world-writable-homedirs
Когда read
передается несколько аргументов, он разбивается на поля символа в IFS
(в данном случае :
) и назначает каждое поле переменной, названной таким образом. Тогда в этом случае мы назначаем первые пять полей переменным с именем _
, а шестое - переменной с именем home
.
Не передавая -r
в read
, он говорит, что он должен трактовать \:
как литерал :
, так что вы можете иметь пользователей с двоеточиями в их понятных для человека именах или полях GECOS, не отбрасывая анализ; это фактически делает анализ на основе read
более точным, чем анализ awk
.