Emacs 如何使用scp或rsync使用Tramp传输文件

Emacs 如何使用scp或rsync使用Tramp传输文件,emacs,org-mode,transfer,tramp,Emacs,Org Mode,Transfer,Tramp,我读过《流浪汉手册》和网上的几十个论坛,但我找不到这个问题的答案。我试图在组织模式下设置一个链接,将文件从远程服务器传输到本地计算机(反之亦然)。 根据手册,我必须写一些 /scp:user@host:filepathnremotemachine 就这样。没有指定文件应该移动到哪里,这很奇怪。 我尝试过这样做,它只是打开了文件(就像我在使用ssh一样);也尝试过其他组合,没有任何运气。 我之所以尝试使用tramp而不是shell:command链接执行此操作,有一个特定的原因。欢迎任何帮助 更新

我读过《流浪汉手册》和网上的几十个论坛,但我找不到这个问题的答案。我试图在组织模式下设置一个链接,将文件从远程服务器传输到本地计算机(反之亦然)。 根据手册,我必须写一些
/scp:user@host:filepathnremotemachine
就这样。没有指定文件应该移动到哪里,这很奇怪。 我尝试过这样做,它只是打开了文件(就像我在使用ssh一样);也尝试过其他组合,没有任何运气。 我之所以尝试使用tramp而不是
shell:command
链接执行此操作,有一个特定的原因。欢迎任何帮助

更新
显然,流浪汉没有它承诺的那么有用。这就剩下了
shell:command
link选项。然后,问题是如何避免弹出的openssh窗口。我找到的最接近的解决方案是,它将继续设置ssh代理。我不太熟悉这个过程,我更喜欢使用authinfo.gpg身份验证方法。我有这个选择吗?谢谢。

Tramp本身只提供了本机Emeacs函数的替代实现。从这个意义上说,它是愚蠢的,就像每个库一样,因为它不知道调用方想要什么

我不是一个组织模式专家,但你能告诉我,你想要什么样的链接吗?没有任何远程性,只是一个本地复制文件的链接。用远程文件名替换本地文件名将很容易

我想,您需要像外部链接这样的东西来评估Lisp代码。像

 elisp:(copy-file "/path/src" "/path/target")
以下工程(对于“工程”的某些定义):


但您必须事先安排无密码登录到远程主机(例如,
ssh copy id
将您的公钥发送到远程主机):鉴于org缓冲区中没有输出,没有openssh弹出窗口,这是组织模式中的标准问题,询问您是否真的要执行shell命令,并将文件安静地复制到其目的地。

虽然不是直接在点上,我以前写过一个例子,说明如何使用rsync利用
auth-source
内置包将文件夹/文件与Emacs同步,这样用户就不必每次都输入用户id或密码;此外,还有一个不需要身份验证的本地示例(例如,受信任的家庭网络):其中可能有一些东西可以激励您创建自己的解决方案。我记得Emacs24有一个bug阻止了示例的正确运行,所以请使用Emacs25+。感谢您的输入。我并不担心每次都要输入密码。我的主要问题是tramp似乎无法复制文件或与远程服务器同步文件,这很荒谬,因为这是一种标准操作。如果我找到了解决方案,我会看看你的例子,并在这里发布。一个
shell:command
链接正是你所需要的。你不想这样做的具体原因是什么?Tramp是一种远程访问机制:它只是打开一个(远程)文件,就像它是本地的一样,或者远程保存一个缓冲区,就像你保存到的文件是本地的一样:没什么了。我明白了。我想我对流浪汉的评价太高了。然后我将使用shell:command方法。我不想使用shell链接的原因是我想使用authinfo.gpg身份验证,但我无法让它与那种类型的链接一起工作。具体来说,emacs打开了一个外部openssh窗口,而不是参考authinfo.gpg文件中的相关条目。这并不是为了挑起争端,但tramp非常有用,它承诺的只是它提供的内容。您可能认为它承诺了更多的东西,但这是您的错误,而不是tramp的错误。因此,实际上没有办法在emacs的终端栏上显示密码提示:-(试试迈克尔·阿尔比努斯的答案:
[[elisp:(复制文件)/scp:user@remote:/path/to/file”“/tmp”)][scp]]
如果你没有告诉我,我就看不见了。非常感谢。我的问题有一个非常明显的答案:“这是emacs。总有办法的”:-。许多方面。为了完整起见,在此处添加要复制到服务器和从服务器复制的代码
elisp:(复制文件)/path/src”“/scp:user@host#端口:/path/target“
elisp:(复制文件)/scp:user@host#端口:/path/src”“/path/target”)
我还要补充的是,复制文件功能的可选字段:OK-IF-ready-EXISTS应设置为非nil,否则复制的文件将不会被传输。另一个细节是,如本scp中所述,对于某些emacs/tramp版本不起作用。因此,最好还是坚持使用ssh。
* link to copy a file

[[shell:scp remote.host.com:/path/to/file /tmp][scp]]