是否可以使用 scp 创建一个空文件?

Is it possible to create an empty file using scp?

在 *nix 中,我可以使用 cp 创建一个空文件:

cp /dev/null ~/emptyfile

我想知道是否可以使用 scp(而不是 ssh + touch)来做类似的事情。如果我尝试 运行:

scp /dev/null remoteserver:~/emptyfile

它returns一个错误/dev/null: not a regular file

编辑: 澄清一下,我不想 运行 远程服务器上的任何命令(即不应该调用 ssh 命令)。

所以可以 运行 在本地主机上执行一些命令(echo、cat、dd 或任何其他普通命令)并将生成的文件复制到远程服务器。

最好不要将生成的文件留在本地主机上。如果生成的命令是单行解决方案也很好。

编辑2:

无法使用 cp 命令中的 /dev/null 方法,因为 scp 仅适用于常规文件和目录: https://github.com/openssh/openssh-portable/blob/8a85f5458d1c802471ca899c97f89946f6666e61/scp.c#L838-L850

因此必须使用另一个命令(touch、cat、dd 等)来创建一个常规的空文件(在先前的命令、管道或子 shell 中)。

如果您只是想创建一个空文件,您可以使用 ssh 和 运行 touch 命令,如下所示:

ssh username@remoteserver touch anemptyfile

作为@willh99 ,在本地创建一个空文件,然后执行scp是最可行的解决方案。

到目前为止我想到了这个:

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

它在子 shell 中创建一个空文件,并将其作为 emptyfile.

复制到远程服务器

欢迎任何refactor/improvements。

编辑: 删除 $filename 无论 scp 是否成功,如@Friek 所述。