2017-07-19 33 views
1

我想將wget同時用於-O/- output-document選項(將輸出保存到指定文件名)和--backups選項(在給定數量的備份之間旋轉)。使用wget同時具有-O/- output-document和--backups選項(似乎不起作用)

簡單的測試案例:

wget http://google.com -O myfile --backups=7

不得不運行至少兩次測試備份行爲。 預期行爲:運行兩次後,我會在輸出目錄中使用myfile.1myfile,並使用不同的時間戳。

實際行爲:它只是覆蓋myfile,myfile.1未被創建。

根據對--backups選項的文檔: (https://www.gnu.org/software/wget/manual/wget.html),

'--backups =備份'

前(過)寫入文件,備份一個通過向文件名添加'.1'後綴(VMS上的'_1')來生成現有文件。這樣的備份文件被旋轉到'.2','.3'等等,直到備份(並且超出了那個)。

它不應該覆蓋不先備份現有的文件。在這個選項或者-O/- output-document選項中都沒有提到他們不應該一起工作。

這是正確的嗎?我錯過了什麼嗎?這是一個錯誤?

我可以看到,根據-O/--output-document節記載:

的「-O」使用並不打算僅僅意味着「使用該名稱的文件,而不是一個在URL;」相反,它類似於shell重定向:'wget -O文件http://foo'旨在像'wget -O - http://foo>文件一樣工作。文件將立即被截斷,所有下載的內容將被寫入。

儘管如此,連接所有輸出到一個單一的文件,即使我不認爲這意味着該--backups不應該工作,因爲它仍然是一個非常有用的功能。

是否有另一種方法可以做到這一點? (我想我可以編寫自己的備份輪換腳本,但這很痛苦 - 尋找已經預先製作好的東西)

非常感謝。

回答

0

我一直在使用的解決方法是不使用-O;相反,我只是讓它將輸出保存爲默認文件名(通常爲[email protected]=value等),然後將該文件複製到 wget下載它(並執行其備份循環)後,將該文件複製到所需目標

例子:

#!/bin/bash 

# The --restrict-file-names=windows parameter makes the file names wget saves to 
# more predictable and the same on both unix-like & windows hosts, so that our 
# scripts will work both places. In windows filename mode, '?' in filenames are 
# converted to '@'. 
wget --backups=7 http://example.com/?param=xyz123 --restrict-file-names=windows 

# Manually copy files to expected names after download so --backups option will work. 
# (--backups option doesn't work in combination with -O/--output-file as of wget 1.19.1) 
dest_filename="myfile.zip" 
cp -a "[email protected]param=xyz123" ${dest_filename} 

根據我的經驗,wget的的調用像上面像[email protected]=xxx名結束了......你的里程可能會有所不同;通過運行wget並查看生成的輸出文件名很容易檢查目標文件名是什麼。

導致輸出文件名不太容易預測的Fancier應用程序可能可以使用文件名稱或搜索命令等來處理。