我正在尝试找出一种通过 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
这使您可以在远程主机上运行脚本,而无需实际将其复制到远程主机。
我用这个方法从远程系统收集硬件规格。