Рекурсивно отбирать все файлы, которые принадлежат конкретному пользователю

32

Можно ли найти и отсортировать все файлы, которыми владеет конкретный пользователь? Я сделал кучу вещей как неправильный пользователь и должен дать правильное право владения файлами.

Есть ли рекурсивный и условный способ, которым я могу разбить кучу файлов и каталогов?

Майкл Водопад
источник

Ответы:

60

Вы можете использовать эту портативную команду поиска с чем-то вроде этого.

find . -user old-user -exec chown new-user:new-group {} \;

Вы можете расширить это, чтобы найти конкретные файлы с опциями -iname (не POSIX, но доступны в OSX)

find . -iname '*.html' -user www-data -exec chown www-data:www-data {} \;

. обозначает текущую папку и ниже, так что вы можете использовать конкретный путь в качестве основы.

find /var/www/ -iname '*.html' -user www-data -exec chown www-data:www-data {} \;
StephenTrapped
источник
Что я искал Но только для того, чтобы отметить, что варианты после new-user:new-usernew-user:new-group
Чоуна,
2
Я предполагаю, что фигурные скобки должны быть в кавычках, чтобы правильно обрабатывать пути с пробелами. Итакfind . -user old-user -exec chown new-user:new-group "{}" \;
Дэн Бенами
Если кто-то еще ищет, как найти файлы, не принадлежащие определенному пользователю (файлы пользователя в домашнем каталоге, которые не принадлежат этому пользователю), вы можете добавить '!' в -user other-userраздел, чтобы найти противоположность. Например, find . ! -user other-user.
Джон
Часто вышеупомянутое более полезно, когда вы добавляете -group old-group. Таким образом, вы можете сохранить групповую собственность (администратор, персонал, глупое имя группы)
brianlmerritt
ps - chown может потребовать sudo
brianlmerritt
12

Вы можете использовать

chown --from=CURRENT_OWNER:CURRENT_GROUP -R new_owner:new_group  *

Из руководства chown --help:

  --from=CURRENT_OWNER:CURRENT_GROUP
                     change the owner and/or group of each file only if
                     its current owner and/or group match those specified
                     here.  Either may be omitted, in which case a match
                     is not required for the omitted attribute.

редактировать : это, конечно, работает только на Linux и большинстве UNIces. Для OSX (который основан на BSD) см. Решение @StephenTrapped.

Rik
источник
+1, но это не будет работать на OSX, у chownнего нет этой опции, смотрите здесь .
Тердон
Ой, действительно, я пропустил тег osx :) Проголосовал @StephenTrapped.
Рик
chown --from=CURRENT_OWNER:CURRENT_GROUP -R new_owner:new_group *пропустит скрытые файлы в папке команда запускается, однако chown --from=CURRENT_OWNER:CURRENT_GROUP -R new_owner:new_group .работает и для скрытых файлов в родительской папке.
Лаше
3

-hВариант Chown изменяет разрешение самих символических ссылок на файлы , а не только цель.

Что может иметь решающее значение при работе с программными двоичными папками, которые используют символические ссылки для переключения между версиями.

find . -user old-user -exec chown -h new-user:new-group {} \;

Tarun
источник