передавать файл в удаленный каталог только в том случае, если он не существует без замены

Я использую CentOS linux.

В одной строке cmd, которая возвращает 0, если успех, не-0, если сбой, мне нужно:

  1. Перенесите файл на удаленный сервер.
  2. Не переносите файл, если имя файла существует на удаленном сервере (возврат не-0)

Я думал об использовании rsync , но он возвращает 0, если имя файла существует. scp заменяет существующий файл, поэтому мне это тоже не помогает.

Твист : пользователь, который выполняет эту команду, не является root, файлы принадлежат этому пользователю. Место назначения принадлежит одному пользователю. Для ssh доверие ssh . Но не для этого пользователя. Невозможно запросить пароль, так как эта команда является частью автоматического сценария. Возможны предварительные шаги настройки. Я могу добавить их как одноразовую конфигурацию. Может ли кто-нибудь помочь?

2 Solutions collect form web for “передавать файл в удаленный каталог только в том случае, если он не существует без замены”

Вот простой способ, который не сохраняет метаданные:

 ssh server.example.com 'set -C; cat >/path/to/remote/file' </path/to/local/file 

Вы можете сделать это с помощью rsync с правильными параметрами. Код возврата будет 0, если файл существует, но вместо этого вы можете узнать из подробного вывода.

 changes=$(rsync -a --ignore-existing --itemize-changes \ /path/to/local/file server.example.com:/path/to/remote/file) if [ $? -ne 0 ]; then echo >&2 "Some error occured" return 2 elif [ -n "$changes" ]; then echo "The file was copied" return 0 else echo "The file already existed" return 1 fi 

Проверьте, существует ли файл на удаленном хосте:

 if ! ssh remotehost [ -f incoming/DB1026910.sql ]; then scp DB1026910.sql remotehost:incoming/ fi 
  • Предотвратить учетную запись unix для SSH
  • Аутентификация открытого ключа SSH работает в локальной сети, а не из WAN
  • Как заставить терминатор отображать удаленное имя хоста в строке заголовка?
  • Как я могу узнать, какой конкретный закрытый ключ используется для 1 ssh-соединения?
  • Как я могу изменить логин при аутентификации на SSH?
  • Сценарий удаленного резервного копирования SSH
  • Туннельный HTTP-трафик с использованием другой машины через SSH
  • Создание клиентского VNC-соединения через SSH за один шаг (например, с опцией -via)
  • Перенесите файл с Android на ПК (не в той же сети)
  • Нельзя использовать ключ OpenPGP, экспортированный из GnuPG с SSH
  • История IP-адресов, подключенных к серверу через ssh
  • Interesting Posts

    Нужен скрипт: последние JPEG-файлы для видео, а затем удалите старые JPEG-файлы

    Как APT справляется с разными программами с тем же именем?

    Насколько разумно делать надёжную работу над системами с ограничительной umask?

    Как долго длиннее NoExtract в pacman.conf быть написано короче, все еще читаемым человеком?

    Установите Linux на Chromebook с неисправным модулем TPM?

    Не удается установить java после обновления apt-get

    проверить «новизну» / «is-read» / var / spool / mail / $ USER, например pam_mail для пользовательского сценария motd

    Может кто-то сказать мне, что я делаю неправильно / как исправить этот сценарий оболочки?

    Как найти базовые диски зеркального тома в LVM (linux)?

    Можно ли приостановить системное время?

    SSH не отвечает только от Ubuntu

    Захват файлов журнала, которые заканчиваются любым числом

    Как рисовать на графической консоли Linux?

    Почему скайп не поднимает мой микрофон?

    Сканирование ~ / Скачивание при создании нового файла

    Linux и Unix - лучшая ОС в мире.