希望这将是一个容易解决的问题。我正在尝试使用紧凑的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做到这一点,请告诉我。
答案 0 :(得分:1)
我想不是,您必须使用 rsync 指令将创建的备份从远程计算机复制到您的计算机。
答案 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
指令。