Запретить перезапись файлов при использовании Scp
Я копировал некоторые файлы с помощью scp, и я не хочу перезаписывать уже существующие файлы.
Если я использовал команду cp, я думаю, что это можно сделать с помощью cp -n.
Есть ли аналогичный вариант для scp, я просмотрел документацию SCP и, похоже, такой опции нет.
Является ли rsync или sftp способ решить эту проблему?
Дополнительная информация:
ОС: Ubuntu 12.04
Ответы
Ответ 1
rsync
похоже, является решением вашей проблемы. Вот пример, который я получил от здесь:
rsync -avz foo:src/bar /data/tmp
Параметр -a сохранит разрешения, структуру каталогов, права собственности и символические ссылки. Вы также можете указать любой из этих параметров отдельно.
-v и -z - средние и сжатые соответственно. Вы действительно не нуждаетесь в них, хотя -z хорошо, если вы копируете большие файлы.
Ответ 2
Я просто нашел простой хак. Отметьте существующие файлы как доступные только для чтения.
Ответ 3
rsync -avz --ignore-existing /source folder/* [email protected]:/dstfolder/
--ignore-existing
не будет перезаписывать файлы на удаленном сервере или сервере назначения *.
Ответ 4
rsync через ssh это должно быть.
Ответ 5
Я использовал rsync в прошлом для этого, но обнаружил, что пытаюсь захватить из окна окно с CopSSH и нет rsync:-( Следующие работали просто отлично для меня, используя проверки файлов, чтобы исключить файлы, которые будут перезаписывается и генерирует запросы mutiple 'get' к экземпляру sftp.
( echo 'cd work/ftp/' ;
ssh <user>@<machine> 'cd work/ftp/ && ls -1 ITEM_SALE_SUMMARY_V.*.dat.xz' |
while read line; do [[ -f "$line" ]] || echo get "$line"; done
) | sftp <user>@<machine>
На всякий случай другим нужно решение без rsync!
Ответ 6
Просто для дополнения других решений:
Для одного файла ascii/bin вы можете сделать это с помощью
cat source_file | ssh host "test ! -f target_file && cat > target_file"
Ответ 7
Я не тестировал его, но, возможно, сначала смонтировал через sshfs
, а затем используя cp
выполнит трюк.