Número de diretórios base em filhos de /

1

Eu preciso contar o número de diretórios filhos de / que contêm um ou mais diretórios base. Por exemplo, se john, emily e rick tiverem seus diretórios home em / home / john, / home / emily e / var / lib, a resposta seria 2.

Eu suponho que tenho que usar um pipe com cut e grep, mas não sei exatamente como.

    
por Teodora Argintaru 07.11.2018 / 21:52

1 resposta

1

(export LC_ALL=C
getent passwd | cut -d: -f6 | sort -t/ -uk2,2 | grep -c ..)

Conta o número de segundos componentes exclusivos dos diretórios iniciais do usuário.

  • LC_ALL=C geralmente necessário quando usamos uniq ou sort -u
  • getent passwd retorna o banco de dados da conta (supondo que ele pode ser enumerado, o que nem sempre é o caso para os que estão em rede) como um csv (separados por dois pontos)
  • cut -d: -f6 extrai o sexto campo de cada registro (o diretório inicial)
  • sort -t/ -uk2,2 classifica no segundo componente de diretório e com -u retém apenas um registro para cada chave de classificação exclusiva
  • grep -c .. conta o número de linhas contendo pelo menos dois caracteres, para excluir / (alternativamente: grep -cvx / )

O cut + sort + grep pode ser substituído por uma chamada para awk :

getent passwd | awk -F: '{split($6, p, "/")}
                         p[2] != "" && !seen[p[2]]++ {n++}
                         END {print n}'
    
por 07.11.2018 / 22:08