通过TRAMP

时间:2018-11-01 11:45:59

标签: bash emacs org-mode org-babel

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

#+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做到这一点,请告诉我。

2 个答案:

答案 0 :(得分:1)

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

请参见https://download.samba.org/pub/rsync/rsync.html

答案 1 :(得分:1)

您可以创建另一个在本地执行的代码块,然后调用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指令。