chgrp recursivamente com base no proprietário

1

Eu acidentalmente a coisa toda

drwxr-xr-x  4 imaan                rayhawkpasscom 4096 May  9 14:59 imaan
drwxr-xr-x  4 kimessite            rayhawkpasscom 4096 Mar 15  2011 kimessite
drwxr-xr-x  4 kineticimaging       rayhawkpasscom 4096 Apr  4 15:56 kineticimaging
drwxr-xr-x  4 lynbrookmed          rayhawkpasscom 4096 Jul 18 11:51 lynbrookmed
drwxr-xr-x  5 marcop               rayhawkpasscom 4096 Sep  6 15:39 marcop
drwxr-xr-x  5 mesachiro            rayhawkpasscom 4096 Sep  9 13:21 mesachiro
drwxr-xr-x  4 paramount            rayhawkpasscom 4096 Jun  7 10:39 paramount
drwxr-xr-x  4 paramountco          rayhawkpasscom 4096 Jun 16 13:50 paramountco
drwx------  2 rayhawk              rayhawkpasscom 4096 Jul 13 15:30 rayhawk

Por engano, alterei os grupos de todos esses diretórios para um grupo incorreto.

O nome do grupo deve ser o mesmo do proprietário (3ª coluna) ou da pasta (última coluna)

Existe uma maneira que eu possa automaticamente chgrp recursivamente com base no nome do proprietário / dir?

    
por Steve Robbins 20.09.2011 / 20:21

4 respostas

2

No diretório em questão, eu corria: for i in *; do chown -R $i:$i $i; done

(O "-R" no chown, somente se você fez inicialmente um chgrp recursivo)

    
por 13.10.2011 / 08:52
1

Isso parece correto para mim, mas para o YMMV e pode vender o seu primogênito para doação de órgãos, então tenha cuidado:

find . -type d -maxdepth 1 -exec chgrp -R {} {};
    
por 20.09.2011 / 20:31
0

Use a opção group ou gid em find e faça a alteração no resultado do find. Aqui está um exemplo com diretórios de listagem de propriedade do mySQL

[root@kvm0001 ~]# find /var/ -type d -group mysql -exec ls -la {} \; | more
total 12
drwxr-xr-x.  2 mysql mysql 4096 Oct  9 17:09 .
drwxr-xr-x. 25 root  root  4096 Oct 10 03:52 ..
-rw-rw----.  1 mysql mysql    5 Oct  9 17:09 mysqld.pid
total 20500
drwxr-xr-x.  5 mysql mysql     4096 Oct  9 17:09 .
drwxr-xr-x. 33 root  root      4096 Oct  4 21:01 ..
drwx------.  2 mysql mysql     4096 Oct  4 21:23 cacti
-rw-rw----.  1 mysql mysql 10485760 Oct  9 17:06 ibdata1
-rw-rw----.  1 mysql mysql  5242880 Oct  9 17:09 ib_logfile0
-rw-rw----.  1 mysql mysql  5242880 Oct  4 20:19 ib_logfile1
drwx------.  2 mysql mysql     4096 Oct  4 20:19 mysql
srwxrwxrwx.  1 mysql mysql        0 Oct  9 17:09 mysql.sock
drwx------.  2 mysql mysql     4096 Oct  4 20:19 test

Nesse caso, você deseja alterar os diretórios encontrados para um usuário de grupo diferente. Nesse caso, você faria isso:

find /path/to/directory -type d -group rayhawkpasscom -exec chgrp -Rv {}\;
    
por 10.10.2011 / 13:51
0

Se o nome do diretório for diferente do proprietário e você quiser alterar a propriedade do grupo com base no proprietário, tente o seguinte:

# ls -d */ | while read d; do chgrp -R $(stat -c %U "$d") "$d"; done
    
por 13.10.2011 / 10:07