Limitando quantidade de arquivos na hora de copiar [RESOLVIDO]

1. Limitando quantidade de arquivos na hora de copiar [RESOLVIDO]

Vinicius Dutra
viniciuspdutra

(usa Debian)

Enviado em 27/09/2013 - 12:27h

Olá pessoal, tudo certo?
Estou com a seguinte dúvida, em minha pasta /ftp possuo mais 2 milhões de arquivos (aumentando a cada dia).
Preciso copiar estes arquivos para uma outra pasta (/converter) e trata-los, porem para não travar o servidor eu só posso tratar 100 arquivos por vez.

Como faço um script para copiar apenas 100 arquivos por vez e colocar na pasta? Vou colocar este script em cron para rodar a cada 1h.

Obrigado pela ajuda.


  


2. MELHOR RESPOSTA

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 27/09/2013 - 17:20h

find /tmp | head -5

3. Re: Limitando quantidade de arquivos na hora de copiar [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 27/09/2013 - 12:32h

viniciuspdutra escreveu:

Olá pessoal, tudo certo?
Estou com a seguinte dúvida, em minha pasta /ftp possuo mais 2 milhões de arquivos (aumentando a cada dia).
Preciso copiar estes arquivos para uma outra pasta (/converter) e trata-los, porem para não travar o servidor eu só posso tratar 100 arquivos por vez.

Como faço um script para copiar apenas 100 arquivos por vez e colocar na pasta? Vou colocar este script em cron para rodar a cada 1h.

Obrigado pela ajuda.


Faz por rsync limitando banda.


4. Não deu certo

Vinicius Dutra
viniciuspdutra

(usa Debian)

Enviado em 27/09/2013 - 16:08h

lcavalheiro escreveu:

Faz por rsync limitando banda.


Não deu certo, pois o bwlimit do rsync limita a banda utilizada.
Eu preciso limitar a quantidade de arquivos, não posso utilizar o max-size, pois possuo arquivos de diversos tamanhos.


5. Re: Limitando quantidade de arquivos na hora de copiar [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 27/09/2013 - 17:14h

Não daria pra deixar copiando com uma prioridade bem baixa?

tipo:

nice -n 19 xargs -L1 -i -P1 cp -n {} /home/destino < lista_arquivos.txt


ou então dar um sync após cada arquivo copiado?
assim:

exec 3< lista_arquivos.txt; while read arq <&3; do cp -n "$arq" /home/destino; sync; done; exec 3<&-


Ou então, seguindo a idéia anterior, copiar um arquivo por segundo:

exec 3< lista_arquivos.txt; while read arq <&3; do cp -n "$arq" /home/destino; sync; sleep 1; done; exec 3<&-


Testa aí pra ver se alguma dessas idéias funciona pra sua necessidade

Se você não tiver uma lista de arquivos.txt, você pode embutir um find no comando, por exemplo:


exec 3< <(find /diretorio/dos_arquivos -type f); while read arq <&3; do cp -n "$arq" /home/destino; sync; sleep 1; done; exec 3<&-



6. Resolvido

Vinicius Dutra
viniciuspdutra

(usa Debian)

Enviado em 01/10/2013 - 14:46h

Muito obrigado pessoal, com a ajuda de vocês consegui resolver meu problema.

Segue o script que utilizei:

find /ftp -type f -name *.mp3 | head 100 | while read arq; do mv "$arq" /converter; done






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts