2013-02-23 77 views

回答

8

這些文件似乎是按發佈日期排序的,每個新發布的版本都是一個反映版本號更改的新名稱,因此檢查某個文件的時間戳似乎是不必要的。

此外,您提供了一個指向「目錄」的鏈接,該目錄本質上是一個網頁。 AFAIK,在http中沒有這樣一個目錄(這是一個在給定地址爲你提供數據的通信協議)。你看到的是一個由服務器生成的列表,它類似於Windows文件夾以方便使用,儘管它仍然是一個網頁。

說了這麼多,你可以刮那個網頁。下面的代碼下載在第一位置上的上市文件(假設第一個是最近的一個):

#!/bin/bash 

wget -q -O tmp.html http://www.rstudio.org/download/daily/desktop/ubuntu64/ 
RELEASE_URL=`cat tmp.html | grep -m 1 -o -E "https[^<>]*?amd64.deb" | head -1` 
rm tmp.html 

# TODO Check if the old package name is the same as in RELEASE_URL. 

# If not, then get the new version. 
wget -q $RELEASE_URL 

現在你可以檢查它針對當地最最新版本,並安裝必要時。

編輯:更新的版本,它執行簡單的版本檢查並安裝軟件包。

#!/bin/bash 

MY_PATH=`dirname "$0"` 
RES_DIR="$MY_PATH/res" 

# Piping from stdout suggested by Chirlo. 
RELEASE_URL=`wget -q -O - http://www.rstudio.org/download/daily/desktop/ubuntu64/ | grep -m 1 -o "https[^\']*"` 

if [ "$RELEASE_URL" == "" ]; then 
    echo "Package index not found. Maybe the server is down?" 
    exit 1 
fi 

mkdir -p "$RES_DIR" 
NEW_PACKAGE=${RELEASE_URL##https*/} 
OLD_PACKAGE=`ls "$RES_DIR"` 

if [ "$OLD_PACKAGE" == "" ] || [ "$OLD_PACKAGE" != "$NEW_PACKAGE" ]; then 

    cd "$RES_DIR" 
    rm -f $OLD_PACKAGE 

    echo "New version found. Downloading..." 
    wget -q $RELEASE_URL 

    if [ ! -e "$NEW_PACKAGE" ]; then 
     echo "Package not found." 
     exit 1 
    fi 

    echo "Installing..." 
    sudo dpkg -i $NEW_PACKAGE 

else 
    echo "rstudio up to date." 
fi 

和一對夫婦的意見:

  • 腳本保留本地res/目錄與最新版本(恰好 一個文件),並比較了它的名字與新刮的包名。 這是骯髒的(有一個文件並不意味着它已成功安裝在過去的 )。解析dpkg -l的 輸出會更好,但是包的名稱可能會略微與 不同。
  • 您仍然需要爲sudo輸入 密碼,因此它不會100%自動。有幾種方法可以解決這個問題,儘管在沒有監督的情況下你可能會遇到前面提到的問題 。
+0

太好了。這是太棒了。是否可以添加最後一個條目來安裝下載的文件? – ECII 2013-02-24 07:19:55

1

-N選項將告訴wget只有在文件是新版本時纔會獲取文件。但是,單獨使用wget,您無法完成像下載最新文件的某些遠程目錄中的所有文件一樣廣泛的內容。你需要編寫一個bash腳本或者做一些檢查,然後調用wget來抓取它。

+0

你能指點我的代碼檢查的bash腳本的任何引用嗎? – ECII 2013-02-23 11:59:55

+0

不是我知道的,對不起。另外一個問題就是如果遠程服務器不允許目錄索引。如果您能夠索引目錄,那麼您將能夠輕鬆確定哪個是最新的文件,因此可以使用wget來檢索它。否則,你將不得不繞過無法訪問修改日期/時間的目錄列表。 – L0j1k 2013-02-23 12:03:11

4

稍微吸塵器@Richard的變異泵:

RELEASE_URL=$(wget -q -O - http://www.rstudio.org/download/daily/desktop/ubuntu64 | grep -o -m 1 "https[^\']*") 

# check version from name ... 


wget ${RELEASE_URL} 

這避免了由outputing html文件輸出到stdout並過濾它創建tmp文件。

+0

太好了。謝謝。我怎樣才能修改腳本,然後安裝文件(我假設使用dpgk)?我不熟悉bash – ECII 2013-02-24 07:21:14

相關問題