Bash Script para arquivos cp de uma lista

2

Eu tenho uma grande quantidade de arquivos que eu preciso copiar para o Box.com usando o DAV2fs. Eu descobri que só sou capaz de copiar alguns shows de cada vez, e então eu tenho que esperar por alguns minutos enquanto a caixa alcança ou isso erra.

Então o que eu fiz foi fazer uma lista de todos os arquivos / diretórios usando "find ./ > outfile.txt"

Eu quero repetir a lista de arquivos, e depois de dizer 100 cópias (ou qualquer outra coisa) espere 10 minutos. Como eu faria isso? sem usar cp -r, quando o outfile.txt se parece com:

/dirctory1
/directory1/file.txt
/directory1/file2.txt

cp omite o diretório para que o arquivo e o arquivo2 nunca sejam copiados. Se eu fizer cp -r, ele fará directory1 e todo o seu conteúdo, então minha contagem de arquivos estará desativada.

EDITAR:

Para esclarecer, estou interessado na porção cp. Especificamente, como fazer com que o cp crie um diretório sem fazer -r como -r, isso causará minha contagem.

    
por hemlock 08.12.2016 / 20:46

2 respostas

5

Tente isso. (Não testado).

destination=     # assign 
i=0
while read line; do
    cp --parents "$line" "$destination"
    ((i++))
    [ $i -eq 100 ] && sleep 600 && i=0
done < outfile.txt
# or: done < <(find ... and so on) # to avoid creating the temp file
    
por 08.12.2016 / 23:34
2

Altere o "echo cp" para ser seu verdadeiro cp e o seguinte deve fazê-lo. Ele vai dormir por 10 minutos após cada 100 arquivos. Ele assume que nenhum dos seus nomes de arquivos tem / tinha caracteres de nova linha, de tal forma que cada linha no seu outfile.txt corresponde a um nome de arquivo.

#!/usr/bin/env bash
count=0
while IFS= read -r file
do
  echo cp "$file" dest/
  count=$((++count))
  [[ $(($count % 100)) == 0 ]] && sleep $((10 * 60))
done < outfile.txt
    
por 08.12.2016 / 23:36