无法使用通配符进行SSH命令

时间:2014-03-24 14:19:03

标签: shell unix scripting

我必须检查一些文件是否存在于目录中。它们遵循文件扩展名之外的标准命名约定,因此我想使用外卡,例如:

YYYYMM=201403
FILE_LIST=`cat config.txt`
for file in $FILE_LIST
do
    FILE=`echo $file | cut -f1 -d"~"`
    SEARCH_NAME=$FILE$YYYYMM
    ANSWER=`ssh -q userID@servername 'ls /home/to/some/directory/$SEARCH_NAME* | wc -l'`
    returnStatus=$?
    if [ $ANSWER=1 ]; then
        echo "FILE FOUND"
    else
        echo "FILE NOT FOUND"
    fi
done

通配符不起作用,有关如何让它对shell可见的任何想法吗?

2 个答案:

答案 0 :(得分:0)

我刚才有同样的问题。在绝望中,我只是放弃并使用带有grep和xargs的管道来获得类似通配符的功能。

是(这些都没有 - 并尝试过其他人):

ssh -t r@host "rm /path/to/folder/alpha*"    
ssh -t r@host "rm \"/path/to/folder/alpha*\" "
ssh -t r@host "rm \"/path/to/folder/alpha\*\" "

时:

ssh -t r@host "cd /path/to/folder/ && ls | grep alpha | xargs rm"

注意:我使用ls而不是rm进行了大量的故障排除,以防万一我感到惊讶。

答案 1 :(得分:-1)

使用STDIN更好:

echo "rm /path/to/foldef/alpha*" | ssh r@host sh

通过这种方式,您仍然可以使用shell变量来构造命令。 e.g:

echo "rm -r $oldbackup/*" | ssh r@host sh