Файлы фильтра по словам владельца в соответствии с тем же каталогом

Я пишу сценарий, который имеет общий каталог и под теми каталог, там некоторые файлы с различными владельцами.

Как может я фильтровать файлы по словам владельца с их файлами и анализировать их отдельно с их именем владельца как имя файла:

/gen/comm_owner/a 
/gen/comm_owner/b 

Существует больше чем 20 владельцев больше чем с 60 файлами. ожидаемый вывод gen/comm_owner/a.txt, где a.txt содержит только его файлы, аналогично для b.txt. Я попробовал awk и sed и я могу отфильтровать некоторые вещи, но как выполнить это?

3
задан 9 November 2016 в 15:54

2 ответа

find /some/path -type f -printf "%u/%P\n" | awk -F/ '{u=$1; sub($1"/", ""); print > u}'
  • find -printf опция очень мощна. В этом случае я говорю этому печатать имя пользователя и путь файла прямого доступа, разделенный наклонной чертой (например, muru/foo/bar (или Вы могли использовать %p вместо %P, для muru//some/path/foo/bar).
  • Затем в awk, разделяя на /, я сохраняю первое поле (имя пользователя), удаляю его из входа и затем печатаю вход к тому имени пользователя.

Пример:

$ find /var/lib -type f -printf "%u/%p\n" | awk -F/ '{u=$1; sub($1"/", ""); print > u}'                                              
$ ls
colord  nobody  ntp  ptokax  root  systemd-timesync
$ head ntp
/var/lib/ntp/ntp.drift
$ head nobody
/var/lib/nfs/state
$ head root
/var/lib/dbus/machine-id
/var/lib/os-prober/labels
/var/lib/xkb/README.compiled
/var/lib/logrotate.status
/var/lib/nfs/rmtab
4
ответ дан 1 December 2019 в 13:24

Вы могли использовать эти -user тест к find и передать свои имена пользователей ему с циклом. Вот пример со всего двумя пользователями:

for users in zanna pixie; do find /gen -type f -user "$users"  > /gen/comm_owner/"$users".txt ; done

zanna и pixie пользователи в моей системе. Это создает два файла, названные zanna.txt с текстовым списком файлов, принадлежавших zanna, и pixie.txt с текстовым списком файлов, принадлежавших pixie

, имена файлов в файлах находятся точно в форме, о которой сообщают find с этим примером, но Вы могли скорректировать это, например, Вы могли -exec basename '{}' \; перед перенаправлением, чтобы не иметь полный путь.

3
ответ дан 1 December 2019 в 13:24

Другие вопросы по тегам:

Похожие вопросы: