Можно ли создать пустой файл с помощью scp? - PullRequest
0 голосов
/ 28 ноября 2018

В * nix я могу создать пустой файл, используя cp:

cp /dev/null ~/emptyfile

Я хотел бы знать, возможно ли сделать что-то подобное, используя scp (вместо ssh + touch).Если я пытаюсь выполнить:

scp /dev/null remoteserver:~/emptyfile

, возвращается ошибка /dev/null: not a regular file

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я не хочу запускать какие-либо команды наremoteserver (т. е. не нужно вызывать команду ssh).

Так что можно запустить некоторую команду на локальном хосте (echo, cat, dd или любую другую тривиальную команду) и скопировать полученный файл на удаленный сервер.

Желательно не оставлять полученный файл на локальном хосте.Также хорошо, если полученная команда является однострочным решением.

EDIT2:

Невозможно использовать подход / dev / null, как в команде cp,потому что scp работает только с обычными файлами и каталогами: https://github.com/openssh/openssh-portable/blob/8a85f5458d1c802471ca899c97f89946f6666e61/scp.c#L838-L850

Поэтому необходимо использовать другую команду (touch, cat, dd и т. д.) для создания обычного пустого файла (либо в предыдущей команде, pipe)или пополам).

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Как @ willh99 прокомментировал , создание пустого файла локально, а затем выполнение scp - наиболее выполнимое решение.

До сих пор я придумал следующее:

filename=$(mktemp) && scp $filename remoteserver:~/emptyfile; rm $filename

Создает пустой файл в подоболочке и копирует его на удаленный сервер как emptyfile.

Любой рефакторинг / улучшения приветствуются.

РЕДАКТИРОВАТЬ: удалить $ filename независимо от того, успешно ли выполняется scp, как указано @ Friek.

0 голосов
/ 28 ноября 2018

Если вы просто пытаетесь создать пустой файл, вы можете использовать ssh и запустить команду touch следующим образом:

ssh username@remoteserver touch anemptyfile

...