我有一个脚本,用于scp
将我的电脑上的某些文件备份到连接到 LAN 的另一台电脑上,如下所示:
#!/bin/bash
scp some_directories host@ip-address:backupFolder/
我使用公钥,因此无需输入任何密码即可工作,我只需执行它即可。
问题是,如果我从我的电脑备份某个文件,然后将其删除(从我的电脑而不是远程电脑中删除),当我再次执行此脚本时,它会复制新文件并覆盖现有文件,但不会删除我的电脑中不再存在的以前备份的文件。
因此我需要一种方法来通过某个脚本删除远程 PC 中的文件。我知道的唯一方法是使用 登录ssh host@ip
,然后使用rm
,但显然我无法编写这样的脚本:
#!/bin/bash
ssh host@ip-address
rm -r backupFolder/
因为这样,rm
命令会在我的 PC 中而不是在远程 PC 中查找备份文件夹。
答案1
您的描述有点模糊。但我认为您想要存档的是将远程备份文件夹与您的 PC 同步(同步目录)。
在这种情况下,最合适的工具将是rsync
scp。
好消息是,rsync
通过 SSH 可以完美运行,您的公钥认证将保持良好的运行。
您可以使用下面的命令使远程服务器上的备份与您的 PC 保持同步
rsync -avz --delete --progress --stats some_directories host@ip-address:backupFolder/
笔记:请小心使用 rsync 的尾部斜杠 =>
/
。阅读手册页。
答案2
只需附加您想要远程运行的命令。
ssh user@ip-address rm -r backupFolder/
这将在远程机器上运行单个命令。SSH 客户端的手册页告诉您以下语法:
SYNOPSIS
ssh [-1246AaCfgKkMNnqsTtVvXxYy] ...more options... [user@]hostname [command]
正如您在问题中提到的,应该使用公钥身份验证来登录,而无需输入密码。对于其他访问者,请参阅如何设置无密码 SSH 登录?为了那个原因。
答案3
你可以使用以下脚本
ssh host@ip-address << EOF
`rm foo`
exit
EOF
或者,你可以ssh
在终端中使用重音符号将命令传递给管道,这样就完全不需要编写脚本了。例如:
ssh host@ip-address:folder `rm foo`