Bash 循环通过 ssh 移动远程主机上的目录

Bash 循环通过 ssh 移动远程主机上的目录

我正在尝试找出一种通过 ssh 在远程主机上执行以下循环的方法。

基本上,它会重命名一系列目录以创建轮换备份。但它是本地的。我希望它能针对远程主机上的目录工作。

while [ $n -gt 0 ];
    do {
    src=$(($n-1))
    dst=$n
    if [ -d /backup/$src ];
    then {
    mv /backup/$src /backup/$dst;
    }
    fi;
    }
    ((n--))
done;

答案1

如果你使用 bash,你会想要使用[[and]]而不是[and ]。它使你在这里所做的比较变得更加容易。

首先,$n的起始值是多少?

尝试这个:

ssh usr@host 'for n in {10..1}; do [[ -d /backup/$(($n-1)) ]] && /bin/mv /backup/$(($n-1)) /backup/${n}; done'

那就应该可以了。假设您的起始数字是10。根据 $n 的来源,可以对其进行修改。请注意,mv指定了完整路径...这是因为当您在 ssh 中执行远程会话时,它往往不会执行您的 .bashrc 和 .bash_profile,这意味着您尚未设置 ${PATH}。可能有办法解决这个问题,但我不知道是什么。

写得更加人性化:

for n in {10..1}
do
  if [[ -d /backup/$src ]]
  then
    /bin/mv /backup/$src /backup/$dst
  fi
fi

由于您正在远程执行它,我认为用一行来执行会更容易。

答案2

将脚本放在本地计算机上的文件中,例如,backup.sh像这样运行远程执行:

ssh user@remotehost < backup.sh

这使您可以在远程主机上运行脚本,而无需实际将其复制到远程主机。

我用这个方法从远程系统收集硬件规格

相关内容