. Это покажет, какие пользователи имеют более одного каталога:
find /shared -type d -printf '%u\n' | sort | uniq -dc
Для этого требуется, чтобы GNU find
поддерживал действие -printf
. В вашем CentOS будет это.
Здесь будут перечислены как пользователи с более чем одним каталогом, так и их каталоги:
find /shared -type d -printf '%u %p\0' | 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="\0"
Для максимальной гибкости мы использовали вывод с разделением NUL из find
. Для работы с этим нам понадобится GNU awk или последние версии mawk, которые поддерживают ввод, разделенный NUL. Поскольку вы используете CentOS, все должно быть в порядке.
find / shared -type d -printf '% u% p \ 0'
Это указывает find искать каталоги в / shared
и распечатывать их владельца, % u
вместе с именем каталога, % p
в списке, разделенном NUL.
awk '{c [$ 1] ++; a [$ 1] = a [$ 1] (a [$ 1]? "\ n": "") $ 0} END {для (пользователя в c) if (c [user]> 1) print c [user], a [ user]} 'RS = "\ 0"
Подсчитывает количество каталогов, имеющихся у каждого пользователя, и распечатывает отчет для пользователей, у которых более одного. Более подробно:
c [$ 1] ++
увеличивает счетчик для пользователя, указанного в первом поле ввода.
a [$ 1] = a [$ 1] (a [$ 1]? "\ N": "") $ 0}
сохраняет имя каждого каталога, найденного для этого пользователя.
END {для (пользователя в c) if (c [user]> 1) print c [user], a [user]}
распечатывает отчет.
RS = "\ 0"
сообщает awk
использовать ввод, разделенный NUL. Это делает процесс безопасным, даже если имена каталогов содержат символы новой строки или другие сложные символы.