Вопрос или проблема
Я часто подключаюсь к базе данных по протоколу sftp и получаю данные с помощью get -r
.
Есть ли какой-либо способ пропустить все существующие файлы на моем компьютере? Я пробовал get -r --overwrite
, но это не сработало. (Я знаю, что могу установить файлы на режим только для чтения, но хотел бы найти лучший способ).
Это частично возможно с sftp. Используйте get -a -r
. Согласно странице man для sftp на ubuntu: http://manpages.ubuntu.com/manpages/artful/man1/sftp.1.html, опция -a
пытается продолжить прерванные передачи и перезаписывает файл только в том случае, если в файле есть различия.
Я бы предложил использовать rsync
через ssh
:
rsync -avz -e ssh --progress user@server:/var/db ~/db
Некоторые дополнительные материалы для чтения:
Нет, это невозможно. Страница man для sftp
не упоминает ни одной опции, которая бы это сделала возможным. Вам лучше скопировать файлы в какое-то известное пустое место, а затем скопировать в вашу целевую локацию с помощью
get -r remote_path/ empty_path/
!cp --no-clobber empty_path/ real_target/
Согласно мануалу, вы также можете использовать:
reget -r nameofthefolder destinationfolder
Я не понял, почему, но он создал новую папку с тем же названием, что и удаленная папка, мне пришлось вручную переместить файлы, которые я уже скачал, в новую папку назначения, чтобы избежать повторной загрузки.
Ответ или решение
Как использовать SFTP для скачивания файлов без перезаписи
Работа с SFTP (SSH File Transfer Protocol) для загрузки данных может вызвать некоторые затруднения, особенно когда речь идет о необходимости избежать перезаписи уже существующих файлов на вашем компьютере. В данной статье мы обсудим доступные опции и рекомендуемые решения, чтобы эффективно загружать файлы без лишних проблем.
1. Использование команды get -a -r
Одна из опций, доступных в SFTP, включает в себя использование флага -a
вместе с командой get -r
. Описание данной команды указывает на то, что она пытается продолжить прерванные трансферы и перезаписывает файл только в случае наличия отличий. Таким образом, если файл с таким же именем уже существует, он не будет перезаписан, если нет изменений.
Для этого выполните следующую команду:
sftp user@server
sftp> get -a -r remote_directory local_directory
2. Переход на rsync
Если вы ищете более удобный способ управления файлами, то можете рассмотреть использование rsync
через SSH. Этот инструмент специально создан для синхронизации файлов и каталогов между двумя местоположениями, и он предлагает значительно более гибкие возможности копирования.
Пример команды rsync
выглядит следующим образом:
rsync -avz -e ssh --progress user@server:/path/to/remote_directory ~/local_directory
Эта команда скопирует все файлы и каталоги из удаленной директории в локальную, при этом файлы не будут перезаписываться, если они уже существуют и являются идентичными. Дополнительную информацию вы можете найти в следующих статьях:
3. Альтернативные решения
Если вы по каким-либо причинам не можете использовать rsync
, существует еще несколько обходных путей. Например, вы можете сначала скачать файлы во временную директорию, а затем переместить их, используя команду cp
с параметром --no-clobber
, которая предотвратит перезапись существующих файлов:
sftp user@server
sftp> get -r remote_path/ /path/to/temp_directory/
!cp --no-clobber /path/to/temp_directory/* /path/to/target_directory/
Этот метод требует большего количества действий, но является рабочим вариантом, особенно если у вас нет возможности доступа к другим утилитам.
4. Использование команды reget
Некоторые пользователи нашли решение с помощью команды reget
, которое также поддерживает скачивание файлов. Однако следует быть осторожным, так как эта команда может создать новую папку с таким же именем, и вам потребуется вручную переместить уже загруженные файлы:
sftp user@server
sftp> reget -r nameofthefolder destinationfolder
Заключение
Хотя SFTP не предлагает полной поддержки для загрузки файлов без перезаписи, вы можете использовать комбинированные подходы и разумный выбор инструментов, таких как rsync
, чтобы значительно упростить задачу. Учитывая преимущества каждого метода, вы можете выбрать наиболее подходящий для вашей специфической ситуации.