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

有一些文件,我必须检查它们是否存在于一个目录中。 除了文件扩展名之外,它们遵循标准的命名惯例,所以我想使用通配符,例如:

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 

通配符不工作,如何使其可见的任何想法?

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

是(这些都没有工作 – 并尝试其他人):

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

方法是:

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

注意:我用ls而不是rm来解决问题,以防万一我感到惊讶。

使用STDIN更好:

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

用这种方法你仍然可以使用shell变量来构造命令。 例如:

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