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

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

125 голосов | спросил biznez 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 21 Sep 2009 04:13:38 +0400 2009, 04:13:38

7 ответов


98

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

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

(Обратите внимание на / на стороне источника: без него rsync создаст /remote/directory/directory.)

ответил Gilles 2 J0000006Europe/Moscow 2011, 22:23:07
62

scp перезапишет файлы, если у вас есть права на запись.

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

ответил Reimund 16 +04002012-10-16T01:10:27+04:00312012bEurope/MoscowTue, 16 Oct 2012 01:10:27 +0400 2012, 01:10:27
13

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

scp  `find /data/*.gz -type f -mtime +7` [email protected]:/backup/
ответил Naks 16 Jpm1000000pmThu, 16 Jan 2014 17:19:21 +040014 2014, 17:19:21
6

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

find . -type f -exec chmod a-w

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

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

ответил Mohad 27 32013vEurope/Moscow11bEurope/MoscowWed, 27 Nov 2013 10:07:18 +0400 2013, 10:07:18
6

У меня была аналогичная задача, в моем случае я не мог использовать rsync, csync или FUSE, потому что в моем хранилище есть только SFTP. rsync не удалось изменить дату и время для файла, некоторые другие утилиты (например, csync) показали мне другие ошибки: « Не удалось создать временный файл. ».

Если у вас есть доступ к серверу хранения - просто установите openssh-server или запустите rsync в качестве демона здесь.

В моем случае - я не мог этого сделать, и решение было: lftp . lftp используется для синхронизации:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - это папка на моем ПК, /rem/folder - это sftp://sft.domain.tld/rem/folder.

Вы можете найти справочные страницы по ссылке: http://lftp.yar.ru/lftp -man.html

ответил bolD 3 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 03 Sep 2014 02:40:45 +0400 2014, 02:40:45
3

Чтобы скопировать целую кучу файлов, быстрее их выполнить. Используя -k, вы также запрещаете tar перезаписи файлов при распаковке в целевой системе.

tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>' 
ответил huembi 21 AM000000100000004831 2016, 10:23:48
0

scp перезаписывает файлы, и нет никакого переключателя, чтобы остановить его, но вы можете скопировать что-то в этом роде, сделать scp и затем скопировать существующие файлы обратно. Примеры:

  1. Скопируйте все существующие файлы с помощью

    mkdir original_files ; cp -r * original_files/
    
  2. Скопировать все, используя scp

    scp -r [email protected]:dir/* ./
    
  3. Скопируйте исходные файлы поверх всего, что написано в scp:

    cp -r original_files/* ./
    
ответил A.Badger 21 PMpThu, 21 Apr 2016 19:57:58 +030057Thursday 2016, 19:57:58

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132