Comando single find do Linux dentro de milhares de diretórios [closed]

1

Eu tenho que pesquisar em cerca de 7.000 diretórios e determinar o número de PDFs modificados no mês passado, agrupados pelo tipo de PDF, que está em um banco de dados MySQL. A estrutura da pasta é ...

/folder/to/FORMID/*.pdf
/folder/to/FORMID/*.pdf
/folder/to/FORMID/*.pdf
/folder/to/FORMID/*.pdf

Atualmente estou correndo ...

find "/folder/to/FORMID/" "/folder/to/FORMID/" "/folder/to/FORMID/"  -name '*.pdf' -mtime +31 -mtime -51 | wc -l

exceto com até 4.000 diretórios como parâmetros. Isso não está retornando o que eu sei que são resultados precisos.

Esta é a maneira mais eficiente de fazer isso ou existe outro comando do Linux que eu possa usar?

    
por Webnet 20.09.2012 / 21:26

3 respostas

1

Se você tiver um arquivo que contenha os nomes dos diretórios para pesquisar, você poderá fazer essa combinação shell / find:

for i in 'cat LIST_OF_DIR_NAMES.TXT'; do find ${i} -mtime +31 -mtime -51 -name '*.pdf' ; done | wc -l

Isso será executado em cada diretório em LIST_OF_DIR_NAMES.TXT e fornecerá o total de arquivos encontrados.

    
por 20.09.2012 / 22:24
1

O Find deve funcionar adequadamente. Como o comando está em execução, presumo que não seja um erro de argumentos muito longo demais. Dê isso, pode ser um bug em find . Existem muitas opções que podem razoavelmente trabalhar em torno disso. Aqui estão dois:

  • Criação de scripts em vez de usar localizar diretamente
  • Usando args -n $NUM para verificar $ NUM diretórios por execução de find

    cat directory_list | xargs -n 30 -IX encontrar X -mtime +31 -mtime -51 -name '* .pdf'

Estou assumindo que você tem muitos subdiretórios que você não pretende ler, portanto, não especificando um único diretório de nível superior.

    
por 20.09.2012 / 22:07
0

Se você quiser PDFs modificados NOS últimos 30 dias, você não faria algo assim:

 find dir1 dir2 ... dirn -name '*.pdf' -mtime -31 -print
    
por 20.09.2012 / 21:31

Tags