Ssh

Bash 循環通過 ssh 移動遠端主機上的目錄

  • April 14, 2012

我試圖找出一種通過 ssh 在遠端主機上執行以下循環的方法。

基本上,它會重命名一系列目錄以創建旋轉備份。但它是本地的。我希望它適用於遠端主機上的目錄。

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

如果您使用的是 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

由於您是遠端執行它,我認為單行會更容易。

引用自:https://serverfault.com/questions/379524