Відповіді:
Ви можете використовувати rsync
для цього. rsync
дійсно розроблений для такого типу операцій.
Синтаксис:
rsync -avh /source/path/ host:/destination/path
або
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
При першому запуску він буде копіювати весь вміст, тоді він буде копіювати лише нові файли.
Якщо вам потрібно тунелювати трафік через SSH-з'єднання (наприклад, з метою конфіденційності), як вказано ви спочатку просити рішення на основі SCP, просто додайте -e ssh
до параметрів до rsync
. Наприклад:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "Це перенесло б усі файли, що відповідають шаблону * .c, з поточного каталогу в каталог src на машині foo. Якщо якийсь із файлів уже існує у віддаленій системі, тоді rsync віддалений- Протокол оновлення використовується для оновлення файлу, надсилаючи лише відмінності "
rsync -avuzh /source/path/ host:/destination/path
. Це виконує всю роботу в одній команді, а при наступних викликах передає лише ті файли, які їй потрібні.
Якщо ви хочете дотримуватися scp з будь-якої причини, ви можете видалити права доступу w з ваших локальних даних (якщо у вас є право на це) і scp не торкнеться цього. Якщо бути точнішим:
chmod a-w local/*.tar.gz
(у вашому місцевому режисері)scp remote/*.tar.gz local
Це не дуже ефективно, приємно, але може допомогти, якщо вам потрібно швидке тимчасове рішення, не змінюючись на щось інше, ніж scp. (Kudos: scp без заміни існуючих файлів у пункті призначення )
Точної відповіді про те, як це зробити з SCP, не було, оскільки саме це було запитання оригінальним.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Після завершення копіювання файлів змінити права доступу назад:
sudo chmod a+w -R /files
--ignore-existing
справді потрібно?