Enviado em 29/03/2012 - 12:06h
Estou executando a leitura de diretórios em uma rede remota via ssh no qual chamo de espaço virtual.
O problema é que comandos como ls, find, for para pegar uma lista de todos arquivos nem sempre retornam dados.
Mesmo usando xargs costuma apresentar estouro. Cada pasta tem no mínimo 150.000 a 300.000 arquivos de texto aproximadamente.
Não quero ler todas as pastas ao mesmo tempo. Já vou me dar por satisfeito se conseguir fazer uma por vez bem feita.
Não consigo filtrar critérios porque preciso pegar os arquivos na ordem que eles entram no diretório. Não importa se a data da última alteração é antiga ou nova. Se foi alterado agora ou não. O mais importante é tentar pegar a relação de arquivos conforme a ordem que caíram lá dentro.
Ainda nem executei os comandos dentro do script, estou testando opções via linha de comando para tentar descobrir uma opção confiável e nem sempre será a mais rápida.
Melhor opção até agora quando funciona: time find . -type f -ls -name '*.txt' | xargs > lista_arq_tags.trb
real 1m40.193s
user 0m2.696s
sys 0m2.472s
Exemplo abaixo quando o comando funciona:
/media/virtual/procurar/arqs_tags_8
20966 4 -rwxrwxr-x 1 GaTux www 2033 Mar 26 18:40 ./arq_tags_186999404.txt
20967 4 -rwxrwxr-x 1 GaTux www 1775 Mar 26 23:04 ./arq_tags_435306502.txt
20968 4 -rwxrwxr-x 1 GaTux www 2232 Mar 27 01:48 ./arq_tags_464070146.txt
20969 4 -rwxrwxr-x 1 GaTux www 2184 Mar 26 23:00 ./arq_tags_247793561.txt
20970 4 -rwxrwxr-x 1 GaTux www 1944 Mar 26 23:30 ./arq_tags_359819601.txt
20971 4 -rwxrwxr-x 1 GaTux www 1854 Mar 26 23:00 ./arq_tags_40587696.txt
20972 4 -rwxrwxr-x 1 GaTux www 2097 Mar 27 00:29 ./arq_tags_108068330.txt
20973 4 -rwxrwxr-x 1 GaTux www 1978 Mar 26 19:20 ./arq_tags_228116164.txt
20974 4 -rwxrwxr-x 1 GaTux www 1934 Mar 26 21:58 ./arq_tags_87729349.txt
20975 4 -rwxrwxr-x 1 GaTux www 1911 Mar 26 23:24 ./arq_tags_153845672.txt
20976 4 -rwxrwxr-x 1 GaTux www 2170 Mar 26 19:45 ./arq_tags_378751570.txt
20977 4 -rwxrwxr-x 1 GaTux www 2106 Mar 26 22:21 ./arq_tags_420569921.txt
20978 4 -rwxrwxr-x 1 GaTux www 2043 Mar 26 20:52 ./arq_tags_377060627.txt
20979 4 -rwxrwxr-x 1 GaTux www 1862 Mar 27 01:54 ./arq_tags_386733491.txt
20980 4 -rwxrwxr-x 1 GaTux www 1879 Mar 27 03:17 ./arq_tags_364654716.txt
20981 4 -rwxrwxr-x 1 GaTux www 2093 Mar 26 22:54 ./arq_tags_488017917.txt
20982 4 -rwxrwxr-x 1 GaTux www 2156 Mar 26 22:38 ./arq_tags_311716549.txt
20983 4 -rwxrwxr-x 1 GaTux www 2032 Mar 26 21:14 ./arq_tags_497012787.txt
20984 4 -rwxrwxr-x 1 GaTux www 1898 Mar 26 22:07 ./arq_tags_238815135.txt
20985 4 -rwxrwxr-x 1 GaTux www 1982 Mar 26 19:39 ./arq_tags_75636656.txt
20986 4 -rwxrwxr-x 1 GaTux www 2159 Mar 27 00:25 ./arq_tags_188937249.txt
20987 4 -rwxrwxr-x 1 GaTux www 1763 Mar 27 02:05 ./arq_tags_310999058.txt
20988 4 -rwxrwxr-x 1 GaTux www 1842 Mar 26 19:29 ./arq_tags_134247188.txt
20989 4 -rwxrwxr-x 1 GaTux www 1958 Mar 27 00:47 ./arq_tags_331621256.txt
20990 8 -rwxrwxr-x 1 GaTux www 4668 Mar 26 22:45 ./arq_tags_309756929.txt
20991 4 -rwxrwxr-x 1 GaTux www 2035 Mar 26 18:31 ./arq_tags_461930380.txt
20992 4 -rwxrwxr-x 1 GaTux www 1888 Mar 26 22:17 ./arq_tags_274771577.txt
20993 4 -rwxrwxr-x 1 GaTux www 1991 Mar 26 22:46 ./arq_tags_242991309.txt
20994 4 -rwxrwxr-x 1 GaTux www 2024 Mar 26 22:44 ./arq_tags_168691120.txt
20995 4 -rwxrwxr-x 1 GaTux www 1935 Mar 26 21:52 ./arq_tags_195557193.txt
20996 8 -rwxrwxr-x 1 GaTux www 4330 Mar 26 23:46 ./arq_tags_350095235.txt
20997 4 -rwxrwxr-x 1 GaTux www 1995 Mar 27 09:42 ./arq_tags_466574252.txt
20998 4 -rwxrwxr-x 1 GaTux www 1943 Mar 26 20:13 ./arq_tags_203206125.txt
Apenas uma pequena parte do arquivo que estou gerando. Tem hora que fica vazio quando diz que tem muitos argumentos e tem hora que não consigo ver erro algum.
A minha ideia era tentar ler o diretório em etapas bem rápidas de 100 a 500 por vez. Após usar os arquivos eu vou apagando. Não tenho dúvida em usar de 100 a 500 por vez e nem apagar. Meu problema é como gerar este arquivo que contém todos os nomes de forma confiável sem falhar ?
O Linux não tem algum lugar que guarda um dicionário e ponteiros para qualquer arquivo gravado no HD para uma leitura rápida via DB ?
Andei pesquisando a opção updatedb mas ela não serve porque os dados estão em servidor remoto. Localmente o updatedb se atualizado deixa mesmo rápido a pesquisa dos nomes de arquivos. Passa a ser imediata o retorno da leitura. Acho que o problema maior é estar acessando os arquivos em um ambiente virtual.
Tem outra forma eficiente de fazer ?
Tô aceitando qualquer sugestão por mais maluca que seja desde que não demore mais de 20 segundos para gerar a relação de 200.000 arquivos lidos em um diretório via ssh. Eu quero os nomes deles e não dos dados kkkk
Agradeço de antemão por qualquer ajuda e a solução que encontrar vou compartilhar por aqui.
O MALEDETO DO ERRO QUE SEMPRE ESTÁ QUEBRANDO AS MINHAS PERNAS É: [ Lista de argumentos muito long ]
Tem hora que aparece e tem hora que não. Acontece AS VEZES em diretórios com mais de 150.000 arquivos. Sempre ocorre em diretórios com 500.000 arquivos.
#GA
O problema é que comandos como ls, find, for para pegar uma lista de todos arquivos nem sempre retornam dados.
Mesmo usando xargs costuma apresentar estouro. Cada pasta tem no mínimo 150.000 a 300.000 arquivos de texto aproximadamente.
Não quero ler todas as pastas ao mesmo tempo. Já vou me dar por satisfeito se conseguir fazer uma por vez bem feita.
Não consigo filtrar critérios porque preciso pegar os arquivos na ordem que eles entram no diretório. Não importa se a data da última alteração é antiga ou nova. Se foi alterado agora ou não. O mais importante é tentar pegar a relação de arquivos conforme a ordem que caíram lá dentro.
Ainda nem executei os comandos dentro do script, estou testando opções via linha de comando para tentar descobrir uma opção confiável e nem sempre será a mais rápida.
Melhor opção até agora quando funciona: time find . -type f -ls -name '*.txt' | xargs > lista_arq_tags.trb
real 1m40.193s
user 0m2.696s
sys 0m2.472s
Exemplo abaixo quando o comando funciona:
/media/virtual/procurar/arqs_tags_8
20966 4 -rwxrwxr-x 1 GaTux www 2033 Mar 26 18:40 ./arq_tags_186999404.txt
20967 4 -rwxrwxr-x 1 GaTux www 1775 Mar 26 23:04 ./arq_tags_435306502.txt
20968 4 -rwxrwxr-x 1 GaTux www 2232 Mar 27 01:48 ./arq_tags_464070146.txt
20969 4 -rwxrwxr-x 1 GaTux www 2184 Mar 26 23:00 ./arq_tags_247793561.txt
20970 4 -rwxrwxr-x 1 GaTux www 1944 Mar 26 23:30 ./arq_tags_359819601.txt
20971 4 -rwxrwxr-x 1 GaTux www 1854 Mar 26 23:00 ./arq_tags_40587696.txt
20972 4 -rwxrwxr-x 1 GaTux www 2097 Mar 27 00:29 ./arq_tags_108068330.txt
20973 4 -rwxrwxr-x 1 GaTux www 1978 Mar 26 19:20 ./arq_tags_228116164.txt
20974 4 -rwxrwxr-x 1 GaTux www 1934 Mar 26 21:58 ./arq_tags_87729349.txt
20975 4 -rwxrwxr-x 1 GaTux www 1911 Mar 26 23:24 ./arq_tags_153845672.txt
20976 4 -rwxrwxr-x 1 GaTux www 2170 Mar 26 19:45 ./arq_tags_378751570.txt
20977 4 -rwxrwxr-x 1 GaTux www 2106 Mar 26 22:21 ./arq_tags_420569921.txt
20978 4 -rwxrwxr-x 1 GaTux www 2043 Mar 26 20:52 ./arq_tags_377060627.txt
20979 4 -rwxrwxr-x 1 GaTux www 1862 Mar 27 01:54 ./arq_tags_386733491.txt
20980 4 -rwxrwxr-x 1 GaTux www 1879 Mar 27 03:17 ./arq_tags_364654716.txt
20981 4 -rwxrwxr-x 1 GaTux www 2093 Mar 26 22:54 ./arq_tags_488017917.txt
20982 4 -rwxrwxr-x 1 GaTux www 2156 Mar 26 22:38 ./arq_tags_311716549.txt
20983 4 -rwxrwxr-x 1 GaTux www 2032 Mar 26 21:14 ./arq_tags_497012787.txt
20984 4 -rwxrwxr-x 1 GaTux www 1898 Mar 26 22:07 ./arq_tags_238815135.txt
20985 4 -rwxrwxr-x 1 GaTux www 1982 Mar 26 19:39 ./arq_tags_75636656.txt
20986 4 -rwxrwxr-x 1 GaTux www 2159 Mar 27 00:25 ./arq_tags_188937249.txt
20987 4 -rwxrwxr-x 1 GaTux www 1763 Mar 27 02:05 ./arq_tags_310999058.txt
20988 4 -rwxrwxr-x 1 GaTux www 1842 Mar 26 19:29 ./arq_tags_134247188.txt
20989 4 -rwxrwxr-x 1 GaTux www 1958 Mar 27 00:47 ./arq_tags_331621256.txt
20990 8 -rwxrwxr-x 1 GaTux www 4668 Mar 26 22:45 ./arq_tags_309756929.txt
20991 4 -rwxrwxr-x 1 GaTux www 2035 Mar 26 18:31 ./arq_tags_461930380.txt
20992 4 -rwxrwxr-x 1 GaTux www 1888 Mar 26 22:17 ./arq_tags_274771577.txt
20993 4 -rwxrwxr-x 1 GaTux www 1991 Mar 26 22:46 ./arq_tags_242991309.txt
20994 4 -rwxrwxr-x 1 GaTux www 2024 Mar 26 22:44 ./arq_tags_168691120.txt
20995 4 -rwxrwxr-x 1 GaTux www 1935 Mar 26 21:52 ./arq_tags_195557193.txt
20996 8 -rwxrwxr-x 1 GaTux www 4330 Mar 26 23:46 ./arq_tags_350095235.txt
20997 4 -rwxrwxr-x 1 GaTux www 1995 Mar 27 09:42 ./arq_tags_466574252.txt
20998 4 -rwxrwxr-x 1 GaTux www 1943 Mar 26 20:13 ./arq_tags_203206125.txt
A minha ideia era tentar ler o diretório em etapas bem rápidas de 100 a 500 por vez. Após usar os arquivos eu vou apagando. Não tenho dúvida em usar de 100 a 500 por vez e nem apagar. Meu problema é como gerar este arquivo que contém todos os nomes de forma confiável sem falhar ?
O Linux não tem algum lugar que guarda um dicionário e ponteiros para qualquer arquivo gravado no HD para uma leitura rápida via DB ?
Andei pesquisando a opção updatedb mas ela não serve porque os dados estão em servidor remoto. Localmente o updatedb se atualizado deixa mesmo rápido a pesquisa dos nomes de arquivos. Passa a ser imediata o retorno da leitura. Acho que o problema maior é estar acessando os arquivos em um ambiente virtual.
Tem outra forma eficiente de fazer ?
Tô aceitando qualquer sugestão por mais maluca que seja desde que não demore mais de 20 segundos para gerar a relação de 200.000 arquivos lidos em um diretório via ssh. Eu quero os nomes deles e não dos dados kkkk
Agradeço de antemão por qualquer ajuda e a solução que encontrar vou compartilhar por aqui.
O MALEDETO DO ERRO QUE SEMPRE ESTÁ QUEBRANDO AS MINHAS PERNAS É: [ Lista de argumentos muito long ]
Tem hora que aparece e tem hora que não. Acontece AS VEZES em diretórios com mais de 150.000 arquivos. Sempre ocorre em diretórios com 500.000 arquivos.
#GA