Цикл Bash для перемещения каталогов в удаленный хост через ssh

Это могло быть связано с Вашим маршрутизатором, пытающимся обработать FTP соединение NAT, отслеживающее автоматически. Это только произошло бы на порте 21, не 22. Выезд http://www.faqs.org/docs/iptables/complexprotocols.html

-1
задан 14 April 2012 в 22:34
2 ответа

Если вы используете 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

Поскольку вы выполняете его удаленно,

3
ответ дан 5 December 2019 в 19:04

Поместите сценарий в файл на локальном компьютере, например, резервную копию .sh и запустите удаленное выполнение следующим образом:

ssh user @ remotehost

Это позволяет вам запускать сценарий на удаленном хосте без фактического копирования его на удаленный хост.

Я использую этот метод для сбора технических характеристик оборудования из удаленных систем .

2
ответ дан 5 December 2019 в 19:04

Теги

Похожие вопросы