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

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

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

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

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

  • Нужен IP для моей виртуальной машины
  • Как вы запускаете CPU на скорости турбонаддува непрерывно
  • Ошибка, какой-то другой хост уже использует адрес IPADDRESS
  • Список услуг с номерами портов
  • Разрешение системной зависимости от Amazon Linux для установки RabbitMQ
  • Проблема pppd по последовательному кабелю
  • LD_LIBRARY_PATH потерян при использовании команды mount
  • Не удается установить ImageMagick на Centos с помощью Yum
  • 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> (каталоги)

    Interesting Posts

    Как получить журнал загрузки ядра с помощью журналаctctl?

    Арки linux и Gnome tap для щелчка не работают

    Shell scripting помогает текстовому файлу в массив

    Unix Program (не ab) для создания локальных запросов на локальный сервер с разными IP-адресами

    Проблема с расширением подстановочных знаков для диапазона петель

    Почему LVM и RAID не требуют кластерной файловой системы

    Как защититься от взлома компьютера USB Live

    Объединение частичных дубликатов

    подача пароля без какого-либо окна терминала (стандартный вывод)

    Как захватить номер порта из этого выхода `lsof -F`, используя awk (или что-то лучше)?

    Проблема использования диска / Linux

    Как root, как я могу перечислить crontab для всех пользователей?

    Как сделать блок OpenVPN split / 56 IPv6 в / 64 подсети для каждого клиента?

    gnome-screensaver-command -lock, скрыть пароль

    Импортируйте мой SSH-ключ в качестве под-ключа GPG для использования для аутентификации SSH

    Linux и Unix - лучшая ОС в мире.