Listar pastas que contenham mais de X imagens

2

Existe uma maneira de retornar uma lista de todas as pastas em um determinado disco contendo mais de X imagens?

A pesquisa deve ser recursiva, mas X não deve.

Exemplo para X = 100:

Folder A
|_ folder A1 (containing 100 pictures)
|_ folder A2 (containing 50 pictures)
|_ 50 pictures

Deve retornar apenas "Pasta A1".

    
por kursus 22.09.2014 / 14:52

2 respostas

1

para cada imagem, imprima o nome do diretório em que ela se encontra:

find \( -name \*.png -or -name \*.gif -or -name \*.jpg \) -printf '%h\n' |

O uniq precisa de entrada classificada, mas find imprime os arquivos aleatoriamente. (No meu teste, mesmo find -depth não ajudou, não me pergunte por quê).

sort |

para cada nome de diretório, informe-nos com que frequência ocorre:

uniq -c |

e finalmente, filtre as linhas que queremos:

while read count dir; do
    if [ "$count" -ge 100 ]; then echo "$count $dir"; fi
done
    
por 22.09.2014 / 19:40
3

Estou supondo que todas as imagens terminem com .png e X=100

find ./ -type d -exec sh -c 'count=$(ls "${0}"/*.png | wc -l); if [ "${count}" -ge 100 ];then echo "${0}"; fi ' {} \;

EDITAR

Pode ser estendido para arquivos para qualquer número de extensions e qualquer valor de X como abaixo

export files='png jpg gif'
export X='100'
find ./ -type d -exec \
sh -c 'count=$(for i in ${files}; do ls "${0}"/*.${i};done | wc -l); \
if [ "${count}" -ge "${X}" ];then echo "${0}"; fi ' {} \;
    
por 22.09.2014 / 15:14

Tags