Quais são as maneiras de procurar arquivos em um diretório com arquivos incontáveis?

1

Eu escrevi um script para salvar registros de solicitações em seus arquivos individuais. Com o tempo, o número de arquivos na pasta parece ter crescido em número por ALOT. Agora preciso acessar alguns logs de algum intervalo de tempo e não consigo fazer isso.

O formato do nome do arquivo de log é este: 2016-02-11_124805_4269_170784456256bc8305a7e8b1455194885_req.xml

Até agora eu tentei

  • ls
  • tar -cvzf 2016-02-20.tar.gz 2016-02-20*.xml para compactar arquivos
  • cat 2016-02-20_01* | grep -nr "text_to_search"
  • ls -lah >> ../list.log
  • find ./dirname -type f >> list2.log
  • E um script para pesquisar o

    for each_file in ./dirname/*
    do
    echo ls -lah $each_file >> ./dirname_file.log
    done
    

O tar e o cat retornam com arguments list too long e outros ainda não me deram uma resposta.

Qualquer ajuda é apreciada.

    
por Starx 03.03.2016 / 12:40

3 respostas

1

find ./dirname -type f -name "2016-02-20_01*" pode funcionar, embora ainda seja provável que não seja rápido.

Você poderia fazer,

find ./dirname -type f -name "2016-02-20_01*" -print | xargs grep -n "text_to_search"

    
por 03.03.2016 / 13:11
1

Com 'ls', tenho a impressão de que a lentidão é causada principalmente pela classificação.

'ls -f' desativará a ordenação, e na minha experiência (com ext3 e xfs alguns anos atrás, quando eu executei um servidor nntp) funciona muito mais rápido.

    
por 03.03.2016 / 22:01
0

Tente isto:

perl -le 'opendir $d,".";while($f=readdir($d)){print $f if $f =~ /^2016-02-20_01/}'

Isto lê as entradas do diretório diretamente e não tenta fazer nada com elas como tal. Se você quiser realmente ver o conteúdo do arquivo, você pode usar:

perl -le 'opendir $d,".";while($f=readdir($d)){if($f =~ /^2016-02-20_01/){print "=== $f ===";open(my $i,"<",$f);while(<$i>){print};close($i)}}'

EDIT: para esclarecer, isso pressupõe que você já esteja conectado ao diretório. (O ponto refere-se ao diretório atual). Caso contrário, substitua "." com o caminho do diretório.

    
por 03.03.2016 / 14:24