знаходити файли, у яких дозвіл груп дозволів на рівні користувача


1

Чи можна зробити щось подібне find -perm g=u? Я кажу "як", тому що -perm mode потрібний режим, щоб вказати всі біти, а не тільки g, і тому що я не можу поставити u на правій стороні =, як я можу з chmod команда:

you can specify exactly one of the letters ugo: the permissions granted
to  the  user  who  owns the file (u), the permissions granted to other
users who are members of the file's  group  (g),  and  the  permissions
granted  to  users  that are in neither of the two preceding categories
(o).

На даний момент я роблю find | xargs -d \\n ls -lartd | egrep '^.(...)\1 що просто потворно.

Дякую.

Відповіді:


2

Це набагато приємніше (створює вихід з розділеного рядка нового рядка):

find . -type f -printf '%04m%p\n' | perl -ne 'print substr($_, 4) if /^.(.)\1/'

Або, якщо будь-яке з ваших імен файлів може містити символи нового рядка (видає нульовий байтів):

find . -type f -printf '%04m%p\0' | perl -n0e 'print substr($_, 4) if /^.(.)\1/'

По суті, команда find виводить такий вивід:

0644./.config/banshee-1/banshee.db
0664./.config/gedit/gedit-print-settings
0664./.config/gedit/gedit-page-setup
0644./.config/gedit/accels

Команда perl фільтрує цей вивід і видаляє режим файлу перед друком будь-якого відповідного рядка:

./.config/gedit/gedit-print-settings
./.config/gedit/gedit-page-setup

Якщо ви бажаєте включити каталоги, FIFO, сокети та вузли пристроїв, а не просто файли, опустіть -type f. Тоді всі символічні посилання з'являться у списку (тому що вони завжди мають режим 0777), тому ви можете або виключити їх з ! -type l або слідувати за ними -L.


-printf, геній!
Jayen

1

Спробуйте це: (потрібно було редагувати, не звертаючи уваги на назви файлів із пробілами)

find . -type d -or -type f -ls | \
 awk '{ perm=$3; fname=11; if (substr(perm,1,3) == substr(perm,4,3)) { printf "%s",perm; while (fname<=NF) printf " %s",$(fname++); printf "\n"; } }'

Лінія розбивається на трубу для зручності читання, але функціонально всього одна лінія

Використовуючи find, можна показувати тільки файли та каталоги, що виключає символічні посилання (завжди мають lrwxrwxrwx perms), сокети та інші не-бажання.

Сценарій awk аналізує висновок пошуку 'ls', порівнює підрядки, що відповідають дозволам користувача і групи, якщо вони рівні, друкує дозволи і ім'я файлу.

Звичайно, ви можете видалити "perm", частину оператора друку, щоб мати лише вихідні назви файлів, після того, як ви перевірите їх на ваше задоволення.


виглядає добре, але я віддаю перевагу відповіді PleaseStand, тому що це коротше і мені подобається perl
Jayen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.