Bash: encontrar o proprietário do grupo de diretórios

6

Tenho certeza de que isso é fácil, mas não consigo encontrá-lo.

Eu estou escrevendo um script bash onde eu quero adicionar um usuário conhecido a um grupo. O nome do grupo é determinado pelo diretório, que é enviado como uma variável para o script bash.

então:

DIR="whatever"
GROUP=DIR groupname 
usermod -a -G $GROUP userx
    
por fiscme 12.04.2013 / 16:33

2 respostas

12

stat -c %g <file> (Linux)

stat -f %g <file> (BSD)

Retornará o ID do grupo para o dado <file>

EDITAR:

stat -c %G <file> (Linux)

stat -f %Sg <file> (BSD)

Irá devolver o nome do grupo.

    
por 12.04.2013 / 16:39
0

Isso é reconhecidamente mais complicado, mas tem o benefício de ser mais compatível com várias plataformas:

Utilizador:

\ls -l "$(dirname $TARGET_FILE)" | grep -v '^l' | grep " $(basename $TARGET_FILE)\$" | awk '{ print $3 }'

Grupo:

\ls -l "$(dirname $TARGET_FILE)" | grep -v '^l' | grep " $(basename $TARGET_FILE)\$" | awk '{ print $4 }'

Quebrando:

  • Use \ls . A barra invertida evita todos os aliases de shell que podem definir opções padrão como -F .
  • Crie uma listagem de formato -l ong do diretório pai para $TARGET_FILE .
  • grep -v '^l' remove quaisquer links simbólicos que possam apontar para $TARGET_FILE da listagem e transmitir o restante.
  • Em seguida, reduza os resultados para a única linha de ls que termina no nome de base de $TARGET_FILE . Os principais ' ' (espaço) e \$ são importantes para corresponder à base inteira. (Caso contrário, old_file , file_new e file podem aparecer).
  • Finalmente, passe a única linha ls -l para o arquivo de destino para awk e pegue o terceiro (ou quarto) item separado por espaço como o nome do usuário (ou grupo).

Observe que essa implementação tem problemas com diretórios relativos. (Não tente executá-lo onde TARGET_FILE=../ , por exemplo). Tenho certeza de que poderia ser mais reforçado usando realpath , mas isso não está disponível no OS X, então voltamos para ferramentas específicas de plataforma se nós usamos isso.

    
por 14.02.2014 / 20:02

Tags