scp е много удобен инструмент за прехвърляне на файлове между различни машини. Може да работи както за ъплоуд, така за даунлоуд, та даже и директно да мести от втора на трета машина. Използва демона на SSH и не се налага да стартирам допълнителни услуги.
Примерна употреба:
scp -P220 192.168.2.1:/extra/ivanatora/snimki/2011_05_18_plovdiv/ .
Взима рекурсивно папката 2011_05_18_plovdiv/ от домашното ми PC и я копира на текущата машина (лаптопа). Освен това -P опцията ще рече че SSH слуша на порт, различен от дефаултния. Ако искам да направя трансфер в обратната посока само трябва да разменя source и destination.
Та така днес рекох да си олекотя малко харда на лаптопа и да прехвърля всички файлове на таймлапсовете от предните постове на домашното PC. Това са доста файлове - 20 хиляди е добро предположение. Общия размер е към 2-3GB, което не е много и в случая това което натоварва са операциите за отваряне и затваряне на файлове. А да - и имах неблагоразумието да пусна всичко това да върви през един wifi рутер, който забива като се погледне накриво. Всичко си вървя към един-два часа, когато трансфера спря и scp умря с "Connection closed: broken pipe".
Опцията беше да го пусна на ново, да чакам час-два и пак да забие. scp няма resume. Освен това не копира файловете в някакъв ред, а хаотично. Не мога да видя до къде е стигнало (коя папка от петте, кой пореден файл) и да продължа ръчно от там.
Тук на помощ идва rsync. Какво е и как се ползва - който иска да чете man-страницата.
Това което ми свърши работа - довърши копирането без да презаписва вече качените файлове:
rsync -r --partial --progress timelapse_* --rsh='ssh -p220' 192.168.2.1:/extra/ivanatora/snimki/
Аргументите:
- -r - рекурсивно пълзи по директорията-източниик
- --partial - запазва файловете, които вече ги има в целта
- --progress - показва колко файла остават и до къде е стигнало
- timelapse_* - папките-източник; * се експандва от шела до timelapse_11_04_2011, timelapse_sky_09_04_2011 и т.н.
- --rsh='ssh -p220' - използва алтернативна команда за пренасяне на файловете. Може да е SSH, но има и други варианти
- 192.168.2.1:/extra/ivanatora/snimki/ - директорията-цел