У меня есть большое количество файлов, которые мне нужно скопировать на Box.com с помощью DAV2fs. Я обнаружил, что могу только копировать пару концертов за раз, а потом мне нужно подождать пару минут, пока ящик догонит или он выйдет из строя.
Итак, что я сделал, я составил список всех файлов / каталогов, используя «find ./> outfile.txt»
Я хочу перебирать список файлов, и, скажем, 100 копий (или что-то еще) ждут 10 минут. Как мне это сделать? без использования cp -r, когда outfile.txt выглядит так:
/dirctory1 /directory1/file.txt /directory1/file2.txt
cp опускает каталог, поэтому файл и файл2 никогда не копируются. Если я сделаю cp -r, тогда он будет делать directory1 и все содержимое, поэтому количество файлов будет отключено.
РЕДАКТИРОВАТЬ:
Чтобы уточнить, меня интересует часть cp. В частности, как получить cp для создания каталога, не делая -r как -r, сбросит мой счет.
Попробуй это. (Не испытано.)
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
Измените «echo cp» как ваш реальный cp
и следующее должно это сделать. Он будет спать в течение 10 минут после каждых 100 файлов. Он предполагает, что ни один из ваших имен файлов не имеет / имел в них символы новой строки, так что каждая строка в вашем файле outfile.txt соответствует имени файла.
#!/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