find /some/path -type f -printf "%u/%P\n" | awk -F/ '{u=; sub("/", ""); print > u}'
-
A opção
find
-printf
é muito poderosa. Nesse caso, digo a ele que imprima o nome de usuário e o caminho de arquivo relativo separados por uma barra (por exemplo,muru/foo/bar
(ou você pode usar%p
em vez de%P
, paramuru//some/path/foo/bar
). - Em seguida, em
awk
, dividindo em/
, salve o primeiro campo (o nome de usuário), remova-o da entrada e imprima a entrada para esse nome de usuário.
Exemplo:
$ find /var/lib -type f -printf "%u/%p\n" | awk -F/ '{u=; sub("/", ""); 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