Movendo grande quantidade de arquivos (~ 100.000)

13

Eu trabalho com pastas que contêm muitos arquivos, como 100 000 ou até 1 000 000 de arquivos por pasta. Quando tento mover o conteúdo de uma pasta para outra, meu computador fica sempre preso. Mesmo quando o processo parece concluído, não consigo ver o conteúdo de nenhuma pasta porque o nautilus parece completamente congelado e preciso forçar meu computador a reiniciar. Notei que isso acontece também quando tento me mover como 10 000 arquivos.

Isso é um problema do meu computador ou é normal quando se trabalha com esses números?

Alguma maneira inteligente de realizar esta transferência de arquivos?

    
por Hyperion 16.04.2016 / 09:59

4 respostas

17

Talvez considere o uso de um método de linha de comando puro para transferir arquivos de grandes quantidades, você encontrará, sem dúvida, que o processo é substancialmente mais rápido do que usar um gui.

Existem muitas maneiras diferentes de conseguir isso, mas o seguinte funcionou de maneira rápida, segura e eficiente no meu sistema:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Algumas explicações para este comando:

  1. Seu diretório de entrada é o '.' caractere e para este comando particular você precisa estar nesse diretório
  2. Seu diretório de saída é o <destination> no meu exemplo. Obviamente, modifique isso para atender às suas próprias necessidades e deixe de fora os colchetes.
  3. Essa sintaxe permite nomes de arquivos com espaços como bônus:)

Mudanças infinitas são possíveis, mas isso deve funcionar bem e muito mais eficientemente do que o gui. Uma permutação, por exemplo: se você quisesse mover os arquivos em pdf somente , poderia executar:

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

O uso de xargs abre muitas possibilidades, particularmente com o movimento de um número tão grande de arquivos. Muitas e muitas possibilidades ....

Problemas potenciais:

Há pelo menos duas possíveis armadilhas a serem ponderadas, graças aos comentários abaixo para esses pensamentos:

  1. Seu diretório de destino pode estar corrompido, em um local subseqüente inacessível, digitado incorretamente etc. mv ainda moverá os arquivos para lá! Tenha cuidado aqui ...
  2. Se a opção -t ( --target-directory ) estiver faltando e a pasta de destino for realmente um arquivo, você moverá um arquivo e falhará no restante. mv tem 2 usos: renomear origem para destino ou mover fonte para diretório . Mais uma vez, tenha cuidado ...
por andrew.46 16.04.2016 / 10:18
4

Eu tive uma experiência semelhante antes, é normal quando se lida com um grande número de arquivos. Eu estava tendo uma grande coleção de folhas de dados em PDF (peças eletrônicas).

Ferramentas de GUI verificam alguns detalhes do arquivo & amp; metadados (Ícone / Miniatura, Tamanho, ...), será um grande negócio nesse caso. Mesmo em Vista de Ícones e sem miniaturas, eles congelarão, pois a maioria deles não foi projetada para casos extremos. Ferramenta GUI tentar carregar ícones de apresentação para todos os arquivos / pastas no diretório, mesmo esses itens não são visíveis para o usuário na parte de tela atual. A classificação também faz parte do problema e não há como evitá-lo.

  • Acabo dividindo arquivos de arquivos em pastas separadas com base na marca / modelo, menos de 10000 cada. Pode ser que você possa usar data (como a maioria das pessoas faz com fotos / digitalizações) ou primeira (s) letra (s) (como no pacote Ubuntu repositório )
  • É mais fácil usar as ferramentas CLI, pois elas mostram apenas o que você solicitou. Você pode usar locate para pesquisa rápida em vez de find .
  • Para a operação de movimentação, use mv no terminal (as ferramentas da GUI estão lentas porque tentam atualizar a visualização periodicamente).

    Se estiver na mesma partição, o comando mudará apenas os ponteiros no índice do sistema de arquivos. Caso contrário, a operação será dupla (copiar e excluir). Isso será caro.

Há apenas um caso em que posso ajudar, se você estiver copiando esses arquivos várias vezes e eles não estiverem atualizados. Como eu fiz quando compartilho minha coleção com amigos, cada vez que tento copiar, é preciso uma década. (Isso é mais útil apenas com arquivos de tamanho pequeno)

  • Crie um único pacote ou alguns pacotes, como zip com nenhuma compactação baixa. Quando você copiá-lo, será mais rápido, então DMA faça o seu trabalho.
por user.dz 16.04.2016 / 11:10
3

Se você estiver procurando uma solução que ofereça os benefícios das operações de linha de comando com a sensação e a flexibilidade da GUI combinada, recomendo mc ( midnight commander ).

É um gerenciador de arquivos visual baseado em ncurses - você tem uma visão de dois painéis em seus arquivos e um menu disponível. O uso do mouse é possível, mesmo em ssh. Você pode navegar pelo seu fs, inspecionar arquivos com o visualizador de arquivos, filtrar de acordo com critérios on-the-fly e ter as operações de copiar ou mover feitas na linha de comando.

É um clone do programa do DOS Norton Commander , que era popular em meados dos anos oitenta. Funciona bem sempre que a GUI começa a não ser confiável para mim e é ideal para o seu propósito.

    
por emk2203 28.04.2016 / 09:55
0

Eu encontrei problemas parecidos - eu estava testando minha configuração RAID e ao fazer grandes transferências (por exemplo, mais de 100.000 arquivos e 1-2 TB de dados de uma só vez) parece que as transferências começam bem rápidas - digamos ~ 200MB / seg., em seguida, reduza a velocidade rapidamente para um platô razoável ~ 90-120MB / s (possivelmente depois de consumir algum armazenamento em cache flash nas unidades). Então, depois de 20 a 30 minutos, a operação gradualmente começa a cair para um platô muito mais baixo, de 30 a 40 MB / s, pior quando se trata de arquivos pequenos, levando uma operação de 4 a 5 horas para mais de 15 horas.

Eu passei algum tempo tentando diagnosticar - por exemplo, possíveis falhas no inversor. Apesar de tentar ferramentas diferentes - linha de comando, nautilus, não consegui manter um rendimento decente para operações de cópia muito grandes.

O que funcionou melhor para mim foi usar o comando da meia-noite, e sempre que a cópia ficava lenta, eu pausava a operação até que a luz do disco rígido fosse apagada depois de qualquer operação pendente - normalmente um minuto ou mais - MC novamente e iria disparar de volta a um ritmo decente por outros 20-30min. Bastante irritante embora.

    
por M Szil 08.09.2017 / 08:24