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

时间:2018-11-28 14:57:48

标签: linux scp

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

cp /dev/null ~/emptyfile

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

scp /dev/null remoteserver:~/emptyfile

它返回错误/dev/null: not a regular file

编辑: 为了澄清起见,我不想在远程服务器上运行任何命令(即,不应调用ssh命令)。

因此可以在本地主机上运行某些命令(echo,cat,dd或任何其他简单命令),然后将生成的文件复制到remoteserver。

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

EDIT2:

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

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

2 个答案:

答案 0 :(得分:0)

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

ssh username@remoteserver touch anemptyfile

答案 1 :(得分:0)

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

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

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

它将在子shell中创建一个空文件,并将其复制为emptyfile到remoteserver。

欢迎任何重构/改进。

编辑:按照@Friek的说明,删除$ filename,无论scp是否成功。