Intereting Posts
«Свободный-как-в-речи» против «свободно-как-в-пиво» virtualbox: как выделить память из свопа В чем разница между '.' и «источник» в оболочках? Как создать зашифрованный контейнер (динамически расширяемый) на OpenBSD отключить ведение журнала консоли Как и какой стиль следует использовать при написании справочных страниц? Как использовать awk или sed для преобразования строк в столбцы mdadm; ранее работала; после «сбоя», не может присоединиться к массиву из-за размера диска Вкладка и завершение Linux mint wifi устройство не входит в список rfkill Просмотр документов .doc и .docx с помощью уравнений MathType в Linux Неверная строка версии «GNU / Linux» при создании загрузочного USB-накопителя GRUB2: добавление модуля insmod xxxx в grub.cfg правильно Разрешение IPv4-адреса из DNS с использованием IPv6-адреса хоста (bind9) Может кто-нибудь объяснить эту строку кода / команды, пожалуйста?

Bash Script для cp-файлов из списка

У меня есть большое количество файлов, которые мне нужно скопировать на 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