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

Linux 是否可以使用scp创建空文件?,linux,scp,Linux,Scp,在*nix中,我可以使用cp创建一个空文件: cp /dev/null ~/emptyfile 我想知道是否可以使用scp(而不是ssh+touch)做类似的事情。如果我尝试运行: scp /dev/null remoteserver:~/emptyfile 它返回一个错误/dev/null:不是常规文件 编辑: 我只是想澄清一下,我不想在远程服务器上运行任何命令(即不应调用ssh命令) 因此,可以在本地主机上运行一些命令(echo、cat、dd或任何其他普通命令),并将生成的文件复制到re

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

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

scp /dev/null remoteserver:~/emptyfile
它返回一个错误
/dev/null:不是常规文件

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

因此,可以在本地主机上运行一些命令(echo、cat、dd或任何其他普通命令),并将生成的文件复制到remoteserver

最好不要将结果文件留在localhost。如果生成的命令是一行程序解决方案,这也很好

EDIT2:

cp
命令中不可能使用/dev/null方法,因为
scp
仅适用于常规文件和目录:


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

如果您只是尝试创建一个空文件,您可以使用ssh并像下面这样运行
touch
命令:

sshusername@remoteserver用@willh99触摸空文件,在本地创建一个空文件,然后执行scp是最可行的解决方案

到目前为止,我得出了以下结论:

filename=$(mktemp) && scp $filename remoteserver:~/emptyfile; rm $filename
它在子shell中创建一个空文件,并将其作为
emptyfile
复制到remoteserver

欢迎进行任何重构/改进。


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

此处描述的解决方案是否适用于您@约翰蒙:不是。我需要一个不使用ssh的解决方案。您的用例是否可以创建一个空文件(
touch afilename
),然后通过scp(
scp afilename
)将其发送到远程主机?@willh99是的,可以。似乎我们所能拥有的只是语法糖和
touch
的替代品,以使其更简单。问题明确地说,不是ssh+touchyep,我知道在现实生活中可能会使用其他命令组合,但我仅限于使用scp,可以在不运行任意命令的情况下访问scp和/或sftp。或者远程系统可能不是unix系统。请务必记住,
touch
并非用于创建空文件。如果
anemptyfile
已经存在一些内容,
touch
只会更新它的时间戳,而不改变它的内容。我想知道你为什么要对这么简单的情况进行微优化。尽管我不会使用“&&rm$filename”,但还是要坚持这一点。如果scp命令失败,临时文件仍将保留。@Friek good point,我可以使用“| | rm$filename”代替。嗯,micro optimizin永远不会给我提供
cp/dev/null emptyfile
:-(使用| | rm..只会在scp实际失败时删除文件。使用;而不是.oops,这是真的。