2014-03-24 72 views
2

有一些,我要检查,如果他们在一个目录中的文件。他们遵循一个标准命名约定除了文件扩展名,所以我想用通配符e.g:无法使用通配符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 [email protected] 'ls /home/to/some/directory/$SEARCH_NAME* | wc -l'` 
    returnStatus=$? 
    if [ $ANSWER=1 ]; then 
     echo "FILE FOUND" 
    else 
     echo "FILE NOT FOUND" 
    fi 
done 

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

+2

在您的'ssh'命令中使用双引号,以便该变量得到扩展。 – fedorqui

+1

风格:摆脱使用ALL_CAPS_VARNAMES的习惯 - 您将有一天使用PATH并破坏您的脚本。 –

+0

注意:无论$ ANSWER是什么:'[$ ANSWER = 1]' - 当给定单个参数时,如果参数不为空,则返回“true”。你的意思'[$ ANSWER -ne 0]'周围[命令Bash的变量扩展]的运营商 –

回答

0

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

为(没有这些工作的 - 并尝试其他):

ssh -t [email protected] "rm /path/to/folder/alpha*"  
ssh -t [email protected] "rm \"/path/to/folder/alpha*\" " 
ssh -t [email protected] "rm \"/path/to/folder/alpha\*\" " 

是:

ssh -t [email protected] "cd /path/to/folder/ && ls | grep alpha | xargs rm" 

注:我做了很多我的故障排除与LS,而不是RM,以防万一我惊讶自己。

-1

它的方式更好地使用STDIN:

echo "rm /path/to/foldef/alpha*" | ssh [email protected] sh 

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

echo "rm -r $oldbackup/*" | ssh [email protected] sh