2009-11-02 3 views
3

У меня есть пара открытого/закрытого ключа, поэтому я могу отправить ssh на удаленный сервер без необходимости входа в систему. Я пытаюсь написать сценарий оболочки, в котором будут перечислены все папки в конкретном каталоге на удаленном сервере. Мой вопрос: как указать удаленное местоположение? Вот что я получил:Сценарий для ssh в удаленную папку и проверку всех файлов?

#!/bin/bash 

for file in [email protected]:dir/* 
do 
if [ -d "$file" ] 
then 
echo $file; 
fi 
done 

ответ

14

Попробуйте это:

for file in `ssh [email protected] 'ls -d dir/*/'` 
do 
    echo $file; 
done 

Или просто:

ssh [email protected] 'ls -d dir/*/' 

Объяснение:

  • SSH команда принимает необязательный команда после hostnam e и, если предоставляется команда, она выполняет эту команду при входе в систему вместо оболочки входа; Затем ssh просто передает на stdout из команды в качестве своего собственного stdout. Здесь мы просто передаем команду ls.
  • ls -d dir/*/- это трюк, позволяющий пропустить обычные файлы и пропустить только каталоги.
+0

удивительный, спасибо. –

+0

привет, есть ли способ добавить awk, чтобы получить только имена файлов? Я как бы застрял на нем, потому что эта команда: для файла в 'ssh $ {SSH_USER} @ $ {SSH_HOST} 'ls -l/path/to/dir/| awk "{print $ 9}" '' do ... кажется, не работает .... спасибо :) – beluga

Смежные вопросы