как найти файл, существующий в определенном каталоге через SSH

как найти файл, существующий в определенном каталоге через SSH

например: host1 и каталог /home/tree/TEST

Host2: - ssh host1 - найти файл TEST, существующий или не использующий bash


person Tree    schedule 16.03.2011    source источник
comment
вы хотите использовать в приложении? требуется логическое значение, или вы можете просто проверить с помощью команды ls   -  person Nirmal- thInk beYond    schedule 16.03.2011
comment
да, я хочу использовать это в приложении, и мне нужно логическое значение   -  person Tree    schedule 16.03.2011


Ответы (4)


ssh вернет код выхода команды, которую вы просите выполнить:

if ssh host1 stat /home/tree/TEST \> /dev/null 2\>\&1
then 
  echo File exists
else 
  echo Not found
fi

Конечно, вам потребуется настроить аутентификацию по ключу, чтобы избежать запроса пароля.

person Erik    schedule 16.03.2011
comment
Мне нравится использовать test -e или test -f, поэтому получается: ssh host1 test -e /home/tree/TEST && echo File exists || echo Not found. - person Chen Levy; 16.03.2011
comment
ssh host bash -c 'ваш однострочный шелл-скрипт здесь' - person Erik; 16.03.2011

Вот что я сделал после прочтения и опробования материала здесь:

FileExists=`ssh host "test -e /home/tree/TEST && echo 1 || echo 0"`

if [ ${FileExists} = 0 ]
  #do something because the file doesn't exist
fi

Дополнительная информация о тесте: http://linux.die.net/man/1/test

person mikeytown2    schedule 16.11.2012

Расширение принятого ответа Эрика.

Вот мой скрипт bash для ожидания загрузки файла внешним процессом. Это заблокирует выполнение текущего скрипта на неопределенный срок, пока файл не будет существовать.

Требуется доступ по SSH на основе ключа, хотя его можно легко изменить на версию curl для проверок по HTTP.

Это полезно для загрузки через внешние системы, в которых используются временные имена файлов:

  • rsync
  • передача (торрент)

Скрипт ниже:

#!/bin/bash
set -vx

#AUTH="user@server"
AUTH="${1}"
#FILE="/tmp/test.txt"
FILE="${2}"

while (sleep 60); do
    if ssh ${AUTH} stat "${FILE}" > /dev/null 2>&1; then
        echo "File found";
        exit 0;
    fi;
done;
person Drew Anderson    schedule 08.04.2013

Не нужно эхо. Не может быть намного проще, чем это :)

ssh host "test -e /path/to/file"
if [ $? -eq 0 ]; then
    # your file exists
fi
person karni    schedule 15.04.2015