Це дуже схоже на відповідь Пітера, але дає користувачеві можливість вибору віддаленого файлу, і де він хоче його зберегти (а також проведення rsync над ssh). Замініть USER і HOST на своє ім'я користувача та хост відповідно.
#!/bin/bash
echo -e "Please enter the full (escaped) file path:"
read -r path
echo "Path: $path"
echo -e "Enter the destination:"
read -r dst
echo "Destination: $dst"
while [ 1 ]
do
rsync --progress --partial --append -vz -e ssh "USER@HOST:$path" $dst
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "rsync failure. Retrying in a minute..."
sleep 60
fi
done
Параметри rsync, що використовуються тут, дозволяють статистику прогресу під час передачі, збереження часткових файлів при несподіваній невдачі, а також можливість додавати до частково завершених файлів після відновлення. Опція -v збільшує деталізацію, опція -z дає можливість стиснення (добре для повільного з'єднання, але вимагає більшої потужності процесора на обох кінцях), а опція -e дає змогу провести цю передачу через ssh (шифрування завжди добре).
Примітка: Використовуйте це лише в тому випадку, якщо у вашому ssh ввімкнено вхід з відкритим ключем, інакше він запитає вас про пароль, коли він перезавантажується (знищуючи всі функції скрипту).
while ./run_script; do echo "Retrying..."; done; echo "Done."
Переконайтесяrun_script
повертається0
на успіх.