2014-03-24 67 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