Eu não entendo script -printf

0

Eu assumi a responsabilidade do script RHEL5 e não tive nenhum treinamento nesta plataforma ou bash scripting. Há um script que tem várias partes e eu vou perguntar apenas sobre a segunda parte, mas também mostrarei o primeiro, pois acho que ajudará com a minha pergunta abaixo.

A primeira parte do script mostra a saída dos usuários em um determinado servidor:

cut -d : -f 1 /etc/passwd

A saída será parecida com:

root
bin
joe
rob
other...

O segundo script exige que eu preencha cada uma das contas listadas no script acima e execute. Pelo que eu posso reunir, e pela minha pesquisa nas man pages e outras pesquisas na web, ele sai e encontra o dono do grupo de um arquivo ou diretório e, obviamente, ordena e escolhe apenas registros únicos, mas não tenho certeza - então essa é a minha pergunta , o que o script abaixo realmente faz? (O engraçado é que, se eu conectar cada nome da saída acima, às vezes receberei uma mensagem "não é possível encontrar o nome de usuário blá, blá, blá").

findusername-printf %G | sort | uniq

    
por jerzdevs 12.11.2013 / 22:36

1 resposta

1

Se você olhar a página find man, encontrará uma descrição da opção -printf :

   -printf format
          True; print format on the standard output, interpreting '\' escapes
          and '%' directives...

Se você olhar mais abaixo na man page, você encontrará a documentação para %G :

          %G     File's numeric group ID.

Portanto, isso localiza todos os arquivos contidos em um diretório chamado username (em seu exemplo) e imprime o ID numérico do grupo que os possui. Isso é canalizado para sort , o que os classificará lexicalmente. Os resultados do sort get são canalizados para uniq , o que removerá entradas duplicadas.

Isso produz uma lista de todos os IDs de grupo exclusivos que possuem arquivos em uma determinada árvore de diretórios.

Conforme escrito, isso não fará exatamente isso, porque não há delimitadores. Se você tiver arquivos pertencentes ao grupo 200 e 100 , a saída será semelhante a:

100200

... o que significa que sort só verá uma única linha e não fará nada.

Poderia adicionar uma nova linha à string de formato para corrigir isso:

find username -printf '%G\n' | ...
    
por 12.11.2013 / 22:53