2011-03-16 31 views
6

如何找到通过SSH如何找到一个文件存在于特定的目录通过SSH

例如在特定的目录文件存在: host1和目录的/ home /树/ TEST

主机2: - SSH主机1 - 找到测试文件存在与否使用bash

+1

你想在应用程序中使用吗?需要布尔值,或者你可以简单地使用ls命令来检查 – 2011-03-16 12:38:16

+0

是的我想在应用程序中使用它并且我需要布尔值 – Tree 2011-03-16 12:39:45

回答

9

SSH将返回命令的退出代码,你问它来执行:

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

你需要有关键authe当然,你可以通过设置认证来避免密码提示。

+6

我喜欢使用'test -e'或'test -f'使其变成:'ssh host1 test - e/home/tree/TEST && echo File exists ||回声未找到。 – 2011-03-16 12:56:29

+1

ssh host bash -c'你的单行shellcript' – Erik 2011-03-16 13:30:59

7

这是我最后的阅读后做什么,在这里尝试的东西:关于测试

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

1

的扩展,埃里克的接受的答案。

这是我的bash脚本,用于等待外部进程上传文件。这会在文件存在之前无限期地阻止当前的脚本执行。

需要基于密钥的SSH访问,虽然这可以很容易地修改为curl版本以通过HTTP进行检查。

这是通过使用临时文件名外部系统上传有用:

  • rsync的
  • 传输(激流)

脚本如下:

#!/bin/bash 
set -vx 

#AUTH="[email protected]" 
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; 
0

无需回声。不能简单得多:)

ssh host "test -e /path/to/file" 
if [ $? -eq 0 ]; then 
    # your file exists 
fi 
相关问题