scp, не заменяя существующие файлы в месте назначения

Как я копирую весь каталог в каталог того же имени, не заменяя содержание в целевом каталоге? (вместо этого, я хотел бы добавить к содержанию папки назначения),

168
26.01.2016, 13:49
4 ответа

Использовать rsync, и передача -u если Вы хотите только обновить файлы, которые являются более новыми в исходном каталоге, или --ignore-existing пропускать все файлы, которые уже существуют в месте назначения.

rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/

(Отметьте / на исходной стороне: без него rsync создал бы /remote/directory/directory.)

149
27.01.2020, 19:28
  • 1
    @Anthon я не понимаю Ваш комментарий и я не вижу ответ или комментарий chandra. --ignore-existing действительно добавляет без замены, какую потерю данных Вы видите? –  Gilles 'SO- stop being evil' 27.11.2013, 11:59
  • 2
    Извините, я только посмотрел на Ваш первый пример, который является, где у Вас может быть потеря данных (и, по моему скромному мнению, не, что OP, который попросили относительно), если Вы включаете - игнорируют - существующей потери данных не должно происходить. –  Anthon 27.11.2013, 12:08
  • 3
    Это не помогает, если удаленная система не имеет rsync легко доступный.... (Как Win32-OpenSSH) –  Gert van den Berg 25.10.2016, 11:00
  • 4
    @GertvandenBerg rsync довольно легко установить в Windows, не тяжелее, чем SSH. –  Gilles 'SO- stop being evil' 25.10.2016, 14:51
  • 5
    @Gilles: Правда, но все опции, кажется, вовлекают Cygwin DLLs... (Текущее состояние порта MS OpenSSH таково, что включения сжатия на scp достаточно для повреждения SCP...) (Получение rsync функциональный по Win32-OpenSSH также кажется нетривиальным - надо надеяться, который улучшается со временем) (Солярис 10 является другим примером, где сторонний пакет и --rsync-path необходим) –  Gert van den Berg 25.10.2016, 16:01

scp перезапишет файлы, если у Вас будут полномочия записи им.

Другими словами: можно сделать scp эффективно пропустите, сказали файлы путем временного удаления полномочий записи на них (если Вы - владелец файлов, который является).

88
27.01.2020, 19:28
  • 1
    Спасибо за это. Был точно прием, который я искал. –  saccharine 17.07.2013, 00:02
  • 2
    удостоверяется, что Вы копируете файлы назад, Вы добавляете *, чтобы сделать так. Пример scp -r user@server.com:/location/of/files/* /local/location/ –  Rick 27.05.2015, 22:16
  • 3
    находит. - тип f - должностное лицо, показанное root:root {} \; –  ling 21.08.2016, 22:58

Если можно сделать целевое содержание файла только для чтения:

find . -type f -exec chmod a-w '{}' \;

перед выполнением scp (это будет жаловаться и пропускать существующие файлы).

И возвратите их позже ( chmod +w получить umask базирующееся значение). Если бы файлы все не имеют разрешения записи согласно Вашему umask, необходимо было бы так или иначе сохранить полномочия так, чтобы можно было восстановить их.

(Ответ жабр перезаписывает существующие файлы, если локально они являются более новыми, я потерял ценные данные тот путь. Не понимайте, почему тот неправильный и вредный ответ имеет, так многие голосуют).

10
27.01.2020, 19:28
  • 1
    я не получаю его: как сделал rsync --ignore-existing заставьте Вас терять данные? –  Gilles 'SO- stop being evil' 27.11.2013, 12:01
  • 2
    я получил ошибку find: missing argument to '-exec' использование этой команды, и вместо этого должно было использовать: find . -type f -exec chmod a-w {} \;. Мой Linux плох, ymmv. –  wpearse 06.04.2015, 03:16
  • 3
    Это - лучший и более безопасный ответ. Корректная команда для изменения разрешения состоит в том, как @wpearse упомянул: find . -type f -exec chmod a-w {} \; –  Amir 17.10.2017, 19:41

Можно скопировать только новые файлы по дате. Использовать find

scp  `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
12
27.01.2020, 19:28
  • 1
    , что +7 означает? –  Francis Kim 01.05.2017, 16:07
  • 2
    @FrancisKim это означает измененный 7 дней назад. Так этот выбор запроса любые *.gz файлы, измененные в течение прошлых 7 дней –  Vadim Eremeev 25.05.2017, 00:34
  • 3
    +7 на самом деле не подразумевает больше чем 7 дней назад? –  Jeff H. 22.03.2018, 00:51

Теги

Похожие вопросы