Existem duas maneiras principais de resolver isso:
-
Modifique o comando
findpara que ele entre apenas nos diretórios nos quais você está interessado e, em seguida, imprima um único caractere (por exemplo,x) para cada arquivo encontrado. Em seguida, conte o número desse caractere produzido comwc -l. É mais seguro gerar um caractere do que o nome do caminho, já que nomes de caminho no Unix podem conter novas linhas. Essa solução é um pouco complicada, pois envolve usar-prunepara ignorar diretórios nos quais não estamos interessados ou, alternativamente,! -path. -
Encontre os diretórios como você fez até agora, mas use um script in-line para fazer a contagem de arquivos. Isso é mais simples e o que estou mostrando abaixo.
find /path/to/cool/stuff -maxdepth 4 -type d -name "*Magic Data*' \
-exec bash -O dotglob -c '
dir=$1
set -- "$dir"/*
printf "%s %d\n" "$dir" "$#"' bash {} ';'
Aqui, encontramos os diretórios como você faz, então, para cada diretório, executamos este pequeno script bash :
dir=$1
set -- "$dir"/*
printf "%s %d\n" "$dir" "$#"
Isso leva o nome do caminho do diretório a partir da linha de comando (dada por find ) e expande o padrão * glob dentro dele. Ao definir a opção dotglob shell na linha de comando do script, garantimos que também contaremos arquivos e diretórios ocultos (remova -O dotglob para não contar nomes ocultos).
Fazemos a expansão de todos os nomes como um argumento para set , que definirá os parâmetros posicionais para as entradas expandidas. O número de parâmetros posicionais está disponível como $# , que é, portanto, também a contagem de arquivos nesse diretório específico.
Relacionados: