Разница между / dev / null и / dev / zero

. Это покажет, какие пользователи имеют более одного каталога:

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. Это делает процесс безопасным, даже если имена каталогов содержат символы новой строки или другие сложные символы.

27
10.01.2016, 14:06
0 ответов

Теги

Похожие вопросы