Як скопіювати лише нові файли за допомогою команди “scp”?


24

Я копіював сотні файлів на інший комп'ютер за допомогою scpкоманди, що отримав stalled помилку . Тепер я збираюсь скопіювати файли ще раз. Чи є якийсь спосіб уникнути копіювання вже скопійованих файлів?

Відповіді:


40

Ви можете використовувати 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

Це --ignore-existingсправді потрібно?
Мейсам

Тому що в цьому прикладі посібника: rsync -t *.c foo:src/-> "Це перенесло б усі файли, що відповідають шаблону * .c, з поточного каталогу в каталог src на машині foo. Якщо якийсь із файлів уже існує у віддаленій системі, тоді rsync віддалений- Протокол оновлення використовується для оновлення файлу, надсилаючи лише відмінності "
Meysam

1
Я зазвичай використовую rsync -avuzh /source/path/ host:/destination/path. Це виконує всю роботу в одній команді, а при наступних викликах передає лише ті файли, які їй потрібні.
Едвард Фолк

6

Якщо ви хочете дотримуватися scp з будь-якої причини, ви можете видалити права доступу w з ваших локальних даних (якщо у вас є право на це) і scp не торкнеться цього. Якщо бути точнішим:

  1. chmod a-w local/*.tar.gz (у вашому місцевому режисері)
  2. scp remote/*.tar.gz local

Це не дуже ефективно, приємно, але може допомогти, якщо вам потрібно швидке тимчасове рішення, не змінюючись на щось інше, ніж scp. (Kudos: scp без заміни існуючих файлів у пункті призначення )


Мені дуже подобається таке рішення. Я збираю файли з віддалених датчиків в архів. Цілі робочі каталоги - у кожному є підкаталог Архів. Як тільки файли перейдуть в Архів, вони ніколи не будуть змінені. Позначити заархівовані файли як -w було б дуже просто, тому це буде те, що я роблю. І робочі файли за межами каталогів архіву можуть бути залишені такими, що є, тому якщо я запускаю програму оновлення протягом дня, вона все одно буде копіювати незавершені файли. Це саме те, що я шукав. TNX багато!
SDsolar

4

Точної відповіді про те, як це зробити з SCP, не було, оскільки саме це було запитання оригінальним.

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

Після завершення копіювання файлів змінити права доступу назад:

sudo chmod a+w -R /files


1
Ну, імовірно, первісне питання було "як я можу вирішити цю проблему", на що rsync є відповіддю.
Едвард Фолк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.