Tente:
find . -type d -exec bash -c '[[ $(find "{}" -type f | wc -l) -gt 31 ]] && echo {}' \;
Eu aconselho usar a restrição -maxdepth
no segundo find
, caso contrário, você poderá encontrar resultados surpreendentes.
Estou usando este script para contar arquivos no meu diretório e subdiretórios:
for i in $(find . -type d) ; do
printf "$i %s\t" ;
( find $i -type f | wc -l ) ;
done
Este script funciona bem. O que eu realmente quero é imprimir apenas os diretórios que contenham mais de 31 arquivos.
Tente:
find . -type d -exec bash -c '[[ $(find "{}" -type f | wc -l) -gt 31 ]] && echo {}' \;
Eu aconselho usar a restrição -maxdepth
no segundo find
, caso contrário, você poderá encontrar resultados surpreendentes.
Substitua a linha:
( find $i -type f | wc -l ) ;
Com isso:
FILES=$( find $i -type f | wc -l );
Então você pode perguntar:
if [ "$FILES" -gt 31 ] ; then
Isso deve ser feito usando -gt
:
for i in $(find . -type d) ; do
NUM=$( find $i -type f | wc -l );
if [[ $NUM -gt 31 ]]; then
echo "$i $NUM" ;
fi
done
Uma solução que usa a matriz bash :
x=( * )
((${#x[@]} > 31)) && printf '%s\n' *