【问题标题】:Reference to local directory inside org-mode 'src' block evaluated remotely via TRAMP引用通过 TRAMP 远程评估的 org-mode 'src' 块内的本地目录
【发布时间】:2018-11-01 11:45:58
【问题描述】:

希望这将是一个容易解决的问题。我正在尝试使用紧凑的 org-mode 'src' 块将我的个人网站直接备份到我的硬盘中,该块通过 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 执行此操作,请告诉我。

【问题讨论】:

    标签: bash emacs org-mode org-babel


    【解决方案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 指令。

    【讨论】:

    • 有趣的选项。我在 src 块中调用 scp 时遇到问题。与post 类似,系统会提示我使用 openssh 输入密码。理想情况下,auth-source 应该处理所有事情。在这方面 TRAMP 工作正常。我知道这有点离题,但是有没有办法将密码查询重定向到 auth-source?谢谢
    • 我不知道,我从来没有玩过 auth-source。我总是为我经常登录的主机设置一个密钥。此外,我使用ssh-agentkeychain 和 Emacs 包keychain-environment
    • 使用与您类似的设置可能会更好。很高兴它只需要执行一个源块,尽管它不那么紧凑。另外,我决定使用rsync 而不是scp 来清理源文件(正如另一篇文章所建议的那样)。我将更新我的问题以显示最终设置。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多