quem obterá uma contagem de “subDir base” sem subDirs?

2

Tudo o que estou tentando fazer é obter uma contagem de direcrories em um nível de uma árvore. até agora eu tenho isso.

find /media/data/temp1  -type d -exec basename {} \;

que me dá isso:

temp1
Coldplay
Greatest Hits
Sex Pistols
never mind the bollocks here's the sex pistols
the great rock and roll swindle
The Boomtown Rats
CD1
CD2
CD3
CD4
Doris Day
Greatest Hits

Para me livrar de todos os diretórios extras que são, na verdade, subdiretórios do diretório "base", logo abaixo de temp1 e, para me livrar do diretório que contém os diretórios, preciso fazer uma contagem:

find /media/data/temp1 -mindepth 1 -maxdepth 1    -type d -exec basename {} \; 

O que me faz isso:

Coldplay
Sex Pistols
The Boomtown Rats
Doris Day

Os diretórios reais no nível que preciso para obter uma contagem de todas as pastas nesse mesmo nível. Então eu posso usá-lo para acompanhar em um contador como

let TotalDir--
echo "Dir left to do is "$TotalDir""

Então, eu sei que tem que haver uma função simples que eu possa canalizar na sintaxe como esta para obter o que eu preciso.

TotalDir=$( echo find /media/data/temp1 -mindepth 1 -maxdepth 1 -type d -exec basename {} \;| "the function name needed here" )

Eu só não sei qual chamada de função usar, ou o que eu chamaria de pequenos programas no Linux que a maioria tem pouco conhecimento de que eles estão lá e outros têm um monte de conhecimento sobre como usá-los.

    
por uxserx-bw 28.11.2015 / 18:48

1 resposta

2

a função que você está procurando é wc (contagem de palavras) com a opção -l para contar linhas (ou seja, a letra l não é o número um).

No entanto, você não precisa encontrar essa tarefa. Uma maneira muito mais fácil de fazer o que você quer é isso:

TotalDir=$( ls -1d */ | wc -l )

observe que é o número um após ls e a letra l após wc .

Editar: resumindo a discussão nos comentários abaixo, aqui está um pouco mais de explicação de como essa solução funciona:

  • -1 informa ls para usar apenas uma coluna, o que garante que obtenhamos realmente uma linha por subdiretório
  • -d informa ls para listar apenas diretórios e não seus conteúdos (apenas tente ls * / com e sem o -d para ver a diferença.
  • */ informa ls para listar todos os diretórios abaixo do atual. /path/to/ParentDirectory/*/ diria ls para listar todos os diretórios abaixo de /path/to/ParentDirectory/
  • finalmente, wc -l conta as linhas da saída do comando ls que --com os parâmetros explicados acima-- é exatamente o número de subdiretórios.
por 29.11.2015 / 01:01