Crie uma listagem de cada usuário que possui um arquivo em um determinado diretório, bem como quantos arquivos e diretórios eles possuem

1

Estou com problemas para entender o código: ls -l /projects/ghosttrail | tail -n +2 | sed 's/\s\s*/ /g' | cut -d ' ' -f 3 | sort | uniq -c . Alguém pode me dar uma explicação detalhada do que está acontecendo a cada passo? Eu sei que posso fazê-lo sozinho, adicionando cada comando um por um, mas o código não está funcionando para mim e eu não consigo entender algumas coisas, como o significado de +2 argumento para cauda ou o que conseguimos, colocando o comando sed e por que não estamos tomando a quarta coluna no comando cut.

Fonte: link

    
por Erwin Smith 01.09.2017 / 11:16

1 resposta

0

Etapas do pipeline, a saída do comando anterior é usada como entrada para o próximo:

  1. ls -l /projects/ghosttrail listam o conteúdo do diretório (não começa com ponto) com detalhes.

  2. tail -n +2 output começando com a linha 2 (remove a primeira linha). Sem + , tail mostraria as últimas duas linhas (quantas forem especificadas por -n , padrão 10 ).

  3. sed 's/\s\s*/ /g' substitui vários espaços sequenciais por um único.

  4. cut -d ' ' -f 3 obtém o terceiro campo (nome de usuário).

  5. sort | uniq -c sort e conta linhas exclusivas. sort é usado porque uniq não detecta linhas repetidas, a menos que elas sejam adjacentes, conforme explicado em man uniq .

Uma maneira alternativa de obter os mesmos resultados usando o GNU find :

find . -maxdepth 1 -not -name '.*' -printf '%u\n' | sort | uniq

find lista os nomes dos usuários ( -printf '%u\n' option) no diretório de trabalho. -maxdepth 1 impede a pesquisa de subdiretórios. -not -name '.*' exclui arquivos de ponto. sort | uniq tem o mesmo propósito que no exemplo original.

    
por 01.09.2017 / 11:51