Как получить команду scp для перезаписи папки назначения


41

Я использую команду scp для копирования некоторых файлов на удаленный компьютер, как вы делаете с scp :)

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

scp -r <source_path> user@myOtherPc:<dest_path>

Где части в <> - мои пути к папкам. Однако, когда я запускаю это, я получаю сообщение «файл существует». Это можно обойти? какая-то сила перезаписать?

Спасибо, Фуддер


2
Не могли бы вы привести несколько примеров пути? Я не выполняю, чтобы воспроизвести это на моей системе. Кроме того, вы проверили права доступа к файлам?
Леванс

Дает ли вам полезную информацию, если вы используете подробный режим? -v, Кроме того, вы используете абсолютный или относительный путь на стороне назначения? Я думаю, что если папка назначения уже существует, она будет создавать исходный путь внутри папки назначения, а не перезаписывать ( testdir/testdir)
beroe

2
Странно, что вы получаете это. Предположительно, у scp нет noclobber ...
Beroe

1
@Levans Я не проверял разрешения, я только что посмотрел, и я думаю, что вы, возможно, правы. Я удалил все в целевой области и начал снова, используя только команду «scp» и используя пользователя «root», и я смог скопировать файлы / папку несколько раз :) ... Я не уверен на 100%, что проблема с разрешением я было, но теперь у меня есть «ручка» по этому вопросу, я, вероятно, могу понять это, спасибо
code_fodder

1
@beroe Да, это то, что я тоже думал ... это меня смутило, но я думаю, что допустил какую-то ошибку пользователя с разрешениями, я пока не эксперт по Linux :( Но я попробую многословность в следующий раз у меня возникнет такая проблема, чтобы получить больше информации, спасибо. Также я заметил, что иногда происходит «папка внутри папки» ... но это другая проблема: o
code_fodder

Ответы:


27

Как сказано выше, scp с радостью перезаписывает любой файл, который уже присутствует.

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


1
Я бы только добавил: ... до тех пор, пока у вас есть права на запись в этот файл ...
SDsolar

но для папок, он объединяет папку или заменяет ее?
Dr_Hope

5

Как и Леванс, я не смог воспроизвести это, но вы рассматривали возможность использования rsync вместо ssh? Если вы копируете большое количество файлов, лучше использовать rsync, чем scp. В Интернете есть несколько хороших руководств, таких как эти:

http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html

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


Интересно, что я не знал, что вы можете использовать rsync таким образом ... просто быстро взглянул на страницу руководства и похоже, что вы можете использовать ее очень похожим образом для scp с <source_path> и <user @ host: dest_path> параметры. Я не на 100% уверен, что это то, что я хочу, так как я хочу всегда копировать / перезаписывать, не заботясь о статусе того, что находится в dest, но все же хорошая идея :)
code_fodder

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

хаха .... не беспокойся о проверке, я могу сделать это ... но спасибо за информацию :)
code_fodder

Ах, круто, я могу перестать смотреть на спички, как средство, чтобы прикрыть веки. ;)
Бен

1
Это может сработать, но это немного похоже на использование кувалды, чтобы ударить муху. ;-)
SDsolar

3

Вы получите это сообщение об ошибке, если каталог назначения уже содержит файл с тем же именем, что и исходный каталог, который вы пытаетесь перенести. Вы не можете иметь файл с тем же именем, что и каталог в том же каталоге.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.