我想編寫一個bash腳本來下載和安裝最新的每日編譯的程序(RStudio)。是否有可能讓wget
僅下載http://www.rstudio.org/download/daily/desktop/目錄中最新的文件?如何wget更新的目錄文件
3
A
回答
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%自動。有幾種方法可以解決這個問題,儘管在沒有監督的情況下你可能會遇到前面提到的問題 。
1
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
相關問題
- 1. 告訴wget只下載目錄中最新的文件?
- 2. 如何從所有孫子目錄wget的文件
- 3. wget:下載目錄/子目錄中的所有文件
- 4. 如何在目錄bash中使用wget文件.sh
- 5. Git重放更新更新的初始文件的新目錄
- 6. CMS SPIP,如何更新Squelettes目錄內的文件
- 7. 如何更新Swift 3.0中的圖像文件目錄路徑?
- 8. 如何通過apache poi更新docx文件的目錄(TOC)
- 9. 如何編輯和更新python目錄中的xml文件
- 10. 複製目錄,但只更新文件
- 11. php從目錄更新文件名
- 12. 如何使用wget下載整個目錄和子目錄?
- 13. 如何更改Django文件夾目錄
- 14. 如何更改默認目錄創建新文件
- 15. 「目錄VIEWS」如何自動更新文件列表?
- 16. wget - 下載子目錄
- 17. 在目錄上使用wget
- 18. WGET只有FTP目錄中的文件名
- 19. WGET下載apache目錄下的特定文件夾
- 20. wget指定下載的文件名和目錄
- 21. 如何用PHP更新不同目錄中的多個PHP文件與更新的PHP文件
- 22. git noob:如何將更新的文件複製到目標目錄?
- 23. 如何讓SCons更新已更改目錄內的已安裝文件?
- 24. 如何在bash腳本中使用wget命令在目錄中下載文件?
- 25. python windows目錄mtime:如何檢測軟件包目錄中的新文件?
- 26. 更新文件中的記錄文件
- 27. 如何添加wget下載的文件?
- 28. wget - 指定目錄並重命名文件
- 29. 使用WGET從網站/目錄下載所有.tar.gz文件
- 30. 如何使用wget在網站上下載最新的文件?
太好了。這是太棒了。是否可以添加最後一個條目來安裝下載的文件? – ECII 2013-02-24 07:19:55