Ответы:
Вы можете использовать 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 remote- Протокол обновления используется для обновления файла путем отправки только различий "
rsync -avuzh /source/path/ host:/destination/path
. Это делает всю работу в одной команде, и при последующих вызовах, только передает файлы, которые нуждаются в этом.
Если вы хотите использовать scp по какой-либо причине, вы можете удалить разрешения w для ваших локальных данных (если у вас есть право сделать это), и scp не будет их трогать. Чтобы быть более точным:
chmod a-w local/*.tar.gz
(в вашем местном каталоге)scp remote/*.tar.gz local
Это не очень эффективно, хорошо, но может помочь, если вам нужно быстрое временное решение, не переходя на что-то другое, кроме scp. (Слава: 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
действительно необходимо?