引用 org-mode 'src' 块内的本地目录,通过 TRAMP 远程评估

Reference to local directory inside org-mode 'src' block evaluated remotely via TRAMP

希望这将是一个容易解决的问题。我正在尝试使用紧凑的 org-mode 'src' 块将我的个人网站直接备份到我的 HDD 中,该块通过 tramp 远程评估。

#+BEGIN_SRC sh :results silent :dir /ssh:username@hostname:
  # Backup mysql database
  mysqldump -u user -p database > public_html/BACKUP.sql
  # Compress directory with the above file and the website main configs
  tar zcvf - public_html > $(date +%Y_%m)-website_backup.tar.gz
  # Remove database backup from server
  rm public_html/BACKUP.sql
#+END_SRC

我对上面代码中的几乎所有内容都很满意,但是,我希望 tar 命令在我的机器或 HDD(本质上是本地)上创建输出文件。目前 tar.gz 文件是在远程机器上创建的。有没有办法在上面的代码中指定我的本地目录?预先感谢您的帮助。

更新

最终设置如下

#+NAME: remote
#+BEGIN_SRC sh :results silent :dir /ssh:username@hostname:
  # Backup mysql database
  mysqldump -u user -p database > public_html/BACKUP.sql
  # Compress directory with the above file and the website main configs
  tar zcvf - public_html > $(date +%Y_%m)-website_backup.tar.gz
  # Remove database backup from server
  rm public_html/BACKUP.sql
#+END_SRC
#+NAME: local 
#+BEGIN_SRC sh :results silent :var r=remote
  echo $r
  rsync -av --remove-source-files -e ssh user@hostname:$(date +%Y_%m)-website_backup.tar.gz /path_to_HDD
#+END_SRC

通过执行本地块将产生所需的输出。注意:它假定使用 ssh-agent。如果有人知道如何使用 auth-source 做到这一点,请告诉我。

我猜不是,您必须使用 rsync 指令将创建的备份从远程计算机复制到您的计算机。

https://download.samba.org/pub/rsync/rsync.html

您可以创建另一个在本地执行的代码块,然后从中调用 scp 或其他任何内容。然后在本地引用远程的。这是一个玩具示例,我的机器是 shannon,远程机器是 easybake:

#+NAME: remote
#+BEGIN_SRC shell :dir /ssh:easybake:
hostname
#+END_SRC

#+RESULTS: remote
: easybake

#+NAME: local 
#+BEGIN_SRC shell :var r=remote
echo $r
hostname
#+END_SRC

#+RESULTS: local
| easybake |
| shannon  |

您不需要使用 remote 的输出,运行它的是 :var 指令。