Я хочу рекурсивно просматривать каталоги, чтобы найти файлы, НЕ принадлежащие конкретному пользователю, и я не уверен, как это написать.
Ответы:
Утилита find (1) имеет основные цвета, которые можно инвертировать ("перевернуть") с помощью символа "!" оператор. Однако в подсказке необходимо избежать отрицания с помощью обратной косой черты, поскольку это метасимвол оболочки. Результат:
find . \! -user foo -print
xargs -I{} -P3 -- ${cmdhere} {}
передача вывода по конвейеру позволяет $ {cmdhere} работать с каждым файлом параллельно. cmdhere :: = стандартные утилиты unix; стандартные unix utils :: = chmod, chown, stat, ls, ...
find . ...
или трубопровод к xargs
первому или второму пути?
find . ! -user foo -exec chown <owner>:<group> {} \;
Ищете файлы, НЕ принадлежащие кому-либо
Другие ответили на вопрос «НЕ принадлежит конкретному пользователю» в теле. Вот тот, который отвечает на главный вопрос, но не был предоставлен:
$ find / -nouser
Вы можете использовать это так:
$ sudo find /var/www -nouser -exec chown root:apache {} \;
И еще один родственный:
$ find / -nogroup
-user
находит по пользователю или идентификатору пользователя и !
инвертирует предикат. Так, ! -user ...
.
Вы можете использовать это:
find <dir> ! -user <username>
Используя z-shell (zsh), вы можете использовать
ls -laR *(^U)
или
ls -la **/*(^U)
для поиска всех файлов, не принадлежащих вам рекурсивно.
-a
флагом из-за подстановочного знака. Для того, чтобы поймать дот файлы используют ЗШ dotglob
вариант: setopt dotglob
. В одной строке: (setopt dotglob; ls **/*(^U) )
. Скобки предназначены для запуска в подоболочке, чтобы вам не приходилось запускать setopt nodotglob
после завершения.
!
кажется необязательным