Я пытаюсь найти способ выполнить следующий цикл на удаленном хосте через 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, вы захотите использовать [[
и ]]
вместо того [
и ]
. Это значительно упрощает сравнение, как вы делаете здесь.
Во-первых, что есть $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
Поскольку вы выполняете его удаленно, я подумал, что будет проще в одной строке.
Поместите сценарий в файл на вашем локальном компьютере, например backup.sh
и запустите удаленное выполнение следующим образом:
ssh user@remotehost < backup.sh
Это позволяет вам запускать сценарий на удаленном хосте, не копируя его на удаленный хост.
Я использую этот метод для сбор технических характеристик оборудования из удаленных систем.