引用 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 指令将创建的备份从远程计算机复制到您的计算机。
您可以创建另一个在本地执行的代码块,然后从中调用 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
指令。
希望这将是一个容易解决的问题。我正在尝试使用紧凑的 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 指令将创建的备份从远程计算机复制到您的计算机。
您可以创建另一个在本地执行的代码块,然后从中调用 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
指令。