Script para arquivos dripfeed

3

Eu preciso escrever um script que verifique um diretório para um determinado tipo de arquivo, digamos * .mov, e passe para, digamos, 50 GB em outro diretório. O propósito é que temos um enorme conjunto de arquivos que precisam passar por outro sistema automatizado, mas o envio de terabytes ao mesmo tempo causará a quebra de vários outros processos.

Existe uma maneira de restringir find a exibir até um determinado tamanho total? Se assim for, eu poderia facilmente find /path/to -iname "*.mov" [halt at 50GB] -exec mv {} /path/to \;

Ou alguém tem alguma outra sugestão sobre como posso automatizar isso? Eu suponho que eu poderia escrever um loop que adicionou o tamanho a uma variável e parou se a variável chegasse a um certo tamanho, como (eu vou me preocupar com a sintaxe do teste do tamanho do arquivo depois):

TOTALSIZE=0
for x in /path/to/*.mov
  do (print file size > $filesize) && TOTALSIZE='expr $TOTALSIZE + $filesize'
    if [ $TOTALSIZE > 50000000 ]
      then exit 0
    else mv $x /destination
  done

Isso funcionaria?

    
por Jangari 26.02.2014 / 01:46

1 resposta

2

Na verdade, acabei de acabar com isso e parece funcionar bastante bem:

for x in $ORIGIN/*.mov
  do FILESIZE='stat -f '%z' "$x"' && TOTALSIZE='expr $FILESIZE + $TOTALSIZE'
    if test $TOTALSIZE -ge 2000000
      then exit 0
      else mv "$x" $DESTINATION
    fi
done

(Eu acabei de testar com 2MB em vez de 50GB, mas eu suponho que vai melhorar)

    
por 26.02.2014 / 02:49