Localizar Diretório se Número de arquivos estiver acima de X

1

Estou me perguntando se alguém pode aconselhar sobre a melhor maneira de fazer isso. Na minha Web Dir tem cerca de 100 pastas; cada pasta é um clientID.

Dentro de cada pasta de ClientID é um sub-conjunto de pastas. Em cada subconjunto de pastas, há um conjunto de pastas estruturadas que são as mesmas.

Exemplo:

httpdocs/client1234/amazon/
httpdocs/client1234/ebay/

Dentro da pasta da Amazon e do Ebay, temos uma estrutura de diretórios como:

In/
Out/
Backup/

O que estou tentando fazer é varrer todo o diretório da Web e localizar as pastas com mais de 50 arquivos no diretório IN.

** editado Incluído no diretório IN. Apenas interessado em Contagem de arquivos no diretório IN.

    
por Dave Hamilton 05.01.2016 / 15:23

3 respostas

2

Este one-liner deve funcionar:

find httpdocs -mindepth 2 -name In | xargs ls -1 | awk '$0 ~ /httpdocs.*In/{name=$0; start=NR} (NR-start)==50{print name;}'

Primeiro, ele encontrará todos os diretórios In , listará todos os arquivos e, por fim, filtrará os arquivos com mais de 50 arquivos.

Ajuste -mindepth de acordo com sua pasta inicial.

    
por 05.01.2016 / 15:49
2

Isto irá percorrer os diretórios solicitados, contando os arquivos (e os arquivos dos subdiretórios) para ver se há mais de 50 arquivos; se assim for, ecoa os diretórios / diretórios correspondentes:

for dir in httpdocs/*/*/In
do
  count=$(find $dir | wc -l)
  if [ $count -gt 50 ]
  then
    echo $dir has more than 50 files
  fi
done

Note que usei estritamente "maior que" 50 porque a saída de find inclui o diretório "In" de nível superior em sua saída para wc -l .

    
por 05.01.2016 / 15:43
0
#!/bin/bash
 for dir in 'find ./httpdocs/*/*/ -name In -type d' ; do
  count='find $dir -type f | wc -l'
  if [[ $count -gt 50 ]]
     echo $dir
  fi
done
    
por 05.01.2016 / 15:38