Imprimir apenas diretórios com mais de 31 arquivos

0

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.

    
por Moncef Benayad 13.11.2014 / 15:54

4 respostas

3

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.

    
por 13.11.2014 / 16:07
2

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
    
por 13.11.2014 / 16:03
2

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
    
por 13.11.2014 / 16:05
0

Uma solução que usa a matriz :

x=( * )
((${#x[@]} > 31)) && printf '%s\n' *
    
por 14.11.2014 / 01:02

Tags