найти пользовательские папки

У меня есть несколько общих папок, и мне нужно найти, есть ли у пользователя несколько папок. например:

/shared/release/ /shared/compile/ /shared/tags/ /shared/general/ 

Мне нужен сценарий bash, который отобразит эти папки и скажет, есть ли у пользователя более одной папки.

Используя bash, как я могу получить список этих папок и определить, владеет ли пользователь более чем одним?

2 Solutions collect form web for “найти пользовательские папки”

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

 find /shared -type d -printf '%u\n' | sort | uniq -dc 

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

  • 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"

    Это подсчитывает количество каталогов, которые каждый пользователь имеет, и печатает отчет для пользователей, имеющих более одного. Более детально:

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

Использование find :

 find /shared -mindepth 1 -maxdepth 1 -type d -user <username> 

Замените <username> фактическим именем пользователя, которое вы хотите найти.

  • -maxdepth 1 предотвратит рекурсивный обход, т. е. будет смотреть только на /shared каталог

  • -mindepth 1 запретит перечисление самого каталога /shared из списка, если оно принадлежит <username> , если вы не хотите, чтобы это поведение удаляло эту опцию

  • -type d указывает, что нас интересуют только каталоги

  • -user <username> указывает, что мы ищем файлы <username> (каталоги)

  • Запустить приложение, основанное на Ubuntu на CentOS
  • CentOS 5.8 с gcc 4.4.7 ссылками на libstdc ++ 6.0.8. Как это возможно?
  • / etc / passwd sql с доступом к bash
  • Как изменить значение тайм-аута службы systemd?
  • Добавить DNS-суффиксы в /etc/resolv.conf
  • Невозможно запустить службу telnet на машине CentOS
  • Почему я не слышу звук, воспроизводимый в моем блендере CentOS 6.5 Vagrant?
  • Как вставить одну и ту же информацию в 2 разных файла?
  • где найти unhide-tcp для centos 6?
  • CentOS 7.2 (теперь для обновления)
  • Запуск исполняемого файла как службы на порту
  • Как запустить службу systemd после команды mount
  • Linux и Unix - лучшая ОС в мире.