Existem duas maneiras principais de resolver isso:
-
Modifique o comando
find
para 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-prune
para 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: