У меня возникли некоторые проблемы при загрузке каталогов (которые содержат другие каталоги глубиной в несколько уровней) по sftp. Я понимаю, что могу обойти это, используя gzipping, но я не понимаю, почему это необходимо.
Во всяком случае, я стараюсь
sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"
Я думаю, что последнее сообщение об ошибке совершенно глупо. Таким образом, каталог не существует? Почему бы не создать каталог?
Есть ли какой-либо вопрос об этой проблеме с sftp, или я должен просто использовать scp?
sftp
позволяетput -r
из OpenSSH 5.4Я не знаю, почему sftp делает это, но вы можете только рекурсивно копировать, если каталог назначения уже существует. Так сделай это ...
источник
-r
нужен OpenSSH 5.4 или вышеВы могли бы быть заинтересованы в использовании
rsync
вместо этого. Команда для этого будетЭто скопирует все
bin/
и поместит на удаленный сервер/home/earlz/blah/bin/
. Как дополнительное преимущество, он сначала проверит, не изменился ли файл на удаленной стороне, и если нет, то не отправит его повторно. Кроме того, вы можете добавить опцию -z, и она сожмет ее для вас.источник
sftp
это команда и протокол .rsync
не поддерживаетsftp
-protocol.lcd
: ваша локальная папка (с подпапками)cd
: ваша удаленная папкаput -r .
источник
cd
в каталог я хотел загрузить это. Спасибо!Могу ли я предложить несколько сложный ответ, без архивирования, но с учетом tar?
Вот так:
Это упакует каталог ./bin с tar (-cf: = create file), filename - (none, stdout) и передаст его через ssh-команду на target.org (который также может быть IP), где команда в кавычках выполняется: cd to blah и tar -xf (извлечь файл) - нет, нет имени, просто stdin.
Это как если бы вы упаковали пакет дома, принесли его на почту, а затем поехали на работу, где ожидали пакет, и открыли его.
Может быть, есть гораздо более элегантное решение, которое просто использует sftp.
источник
tar
- это очень хорошее решение, однако для этого требуетсяssh
поддержка входа (sftp
это другой протоколssh
).tar
в отличие от других, по умолчанию выполняется рекурсивно, передает все специальные файлы (FIFO, блочные / символьные устройства и т. д.), пытается преобразовать отображение UID / GID из источника в целевую систему и имеет традиционную короткую командную строку. (Одно исключение: «доменные сокеты Unix» не переносятся. Но кому это нужно?)pv
инструмент для отслеживания скорости при длинных передачахВы можете использовать yafc (еще один клиент FTP / SFTP).
-r
Вариант там работает очень хорошо.источник
Вы можете использовать rsync , который является очень мощной альтернативой для scp и sftp, особенно при обновлении копий с компьютера A на компьютер B, поскольку он не копирует файлы, которые не были изменены; он также может удалять с компьютера B файлы, которые были удалены с компьютера A (конечно, только если это указано).
например :
Опция -r предназначена для рекурсивного копирования файлов, -z включает сжатие во время передачи, а -p сохраняет права доступа к файлам (создание, редактирование и т. Д.) При копировании, чего scp не выполняет AFAIK. Возможно еще много вариантов; как обычно, прочитайте справочные страницы.
Оригинальный ответ от Karolos
источник
Войдите на удаленный сервер с помощью ssh, используйте sftp для подключения обратно к вашему устройству, затем используйте
get -r
команду для передачи каталогов на удаленный сервер. Команда get позволяет рекурсивно передавать каталоги, не создавая каталог.источник
Случай SFTP:
Мне нужно было скопировать эту структуру на моем FTP:
Это решило мою проблему:
источник
Я только что узнал из Arch Linux Wiki, что можно смонтировать sftp-ресурс с помощью sshfs. Я использую sftp-сервер с chroot и jail, и sshfs работает очень хорошо.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
источник