Шукаєте файли, які НЕ належать комусь


182

Я хочу рекурсивно переглядати каталоги, щоб знайти файли, які НЕ належать певному користувачеві, і я не знаю, як це написати.

Відповіді:


274

Утиліта find (1) має праймери, які можна заперечувати ("перевертати") за допомогою "!" оператор. Однак підказки повинні уникати заперечення з зворотним нахилом, оскільки це метахарактер оболонки. Результат:

find . \! -user foo -print

6
втеча, !здається, необов’язкова
сумнів1ejack

1
трубопровід виводу до xargs -I{} -P3 -- ${cmdhere} {}може {$ {cmdhere} працювати над кожним файлом паралельно. cmdhere :: = стандартні утиліти unix; стандартні програми Unix :: = chmod, chown, stat, ls, ...
Дуайт Спенсер

1
@sorin ти маєш на увазі find . ...або перехід xargsна перший або другий спосіб?
Кев

3
12 має прапор -exec -> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens

1
як додати інформацію про власника як вихід?
Duc Tran

38

Шукаєте файли, які НЕ належать комусь

Інші відповіли на запитання "НЕ належить певному користувачеві" в органі. Ось такий, який відповідає на титульне запитання, але не надано:

$ find / -nouser

Ви можете використовувати його так:

$ sudo find /var/www -nouser -exec chown root:apache {} \;

І пов'язане з ним:

$ find / -nogroup

3
Я дам вам голос за техніку, але люди, як правило, говорять "не належить нікому", якби вони мали на увазі те, що ви тлумачите.
Шибумі

2
@Shibumi - Так, це дуже підходить для тих, що розщеплюються волосся. Проблема, з якою я стикався, мені потрібно було знайти файли, які буквально не належать жодному користувачеві. Він з’явився після оновлення та міграції веб-сервера. Деякі ідентифікатори користувачів / груп змінилися, тому мені потрібно було написати сценарій.
jww

12

-userзнаходить за користувачем або ідентифікатором користувача та !інвертує присудок. Так, ! -user ....


2
Неприйнятний, оскільки він нічого не додає до прийнятої відповіді, і маскує інші можливі відповіді (наприклад, зразок zsh glob нижче).
Уліссе БН

9

Ви можете скористатися цим:

find <dir> ! -user <username> 

2
Неприйнятний, оскільки він нічого не додає до прийнятої відповіді, і маскує інші можливі відповіді (наприклад, зразок zsh glob нижче).
Уліссе БН

5

Використовуючи z-shell (zsh), який можна використовувати

ls -laR *(^U)

або

ls -la **/*(^U)

шукати всі файли, які не належать вам.


Це правда, що команда, наведена вище, не перелічить крапкові файли навіть із -aпрапором через розширення підстановки. Для лову точкових файлів використовуйте параметр zsh dotglob: setopt dotglob. В одному рядку: (setopt dotglob; ls **/*(^U) ). В круглих дужках потрібно запустити в підзаголовок, щоб вам не довелося запускатись setopt nodotglobпісля закінчення.
Зоравар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.