2015-07-03 140 views
1

我正在使用bash腳本使用wget下載多個圖像。wget:刪除不完整的文件

不幸的是,我下載的服務器不夠可靠,因此有時當我下載文件時,服務器將斷開連接並且腳本將移動到下一個文件,而前一個文件不完整。

爲了彌補這一點,我已經嘗試添加第二個行腳本使用獲取所有不完整的文件後:

wget -c myurl.com/image{1..3}.png 

這似乎是工作作爲wget的返回並完成文件下載,但那麼問題就來自於這個:ImageMagick,我用這個來把pdf中的圖像拼成圖像,聲稱圖像的標題存在錯誤。

我與刪除不完整的文件什麼的想法是:

wget myurl.com/image{1..3}.png 
wget -rmincompletefiles 
wget -N myurl.com/image{1..3}.png 
convert *.png mypdf.pdf 

所以現在的問題是,我能代替實際存在的,或者是有一個更好的我應該接近這一-rmincompletefiles使用問題?

+0

嘗試'wget -m URL' – Cyrus

+0

我不認爲我理解鏡像如何幫助我完成我正在嘗試做的事情。 – iTry

回答

1

我在嘗試實施tvm's suggestion時發現了令人驚訝的發現。

事實證明,這是我沒有意識到的,當您運行wget -N時,wget實際上會檢查文件大小並驗證它們是否相同。如果不是,則會刪除文件,然後再次下載。

這麼酷的提示,如果你有同樣的問題,我是!

+1

'wget -N'檢查時間戳服務器。時間戳是文件完全下載後wget設置的最後一件事,這意味着任何部分下載的文件幾乎可以保證有不同的時間戳。問題是,'wget -N'不會重新下載文件,因爲它幾乎可以肯定地在服務器上看到更早的時間戳,並且得出結論:本地文件更新。你會得到一個如下所示的錯誤:'File'somefile.mp3'沒有在服務器上修改。省略下載。如果服務器沒有返回時間戳,那麼wget-N可能適用於您。 –

1

那麼,我會盡力下載文件wget(你可以指定額外的參數,如較大的--timeout給服務器一些額外的時間)。 wget假設某些關於部分下載的事情,甚至有適當的簡歷,他們有時可能會最終變得不堪重負(除非你通過其他方式檢查他們的例如MD5總和)。

由於您使用的是convertbash,Imagemagick軟件包中最有可能提供另一種工具 - 即identify

雖然某些功能確實沒有很好的記錄,但它有一個很棒的功能 - 它可以識別損壞的(或部分下載的圖像)。

➜ ~ identify b.jpg; echo $? 
identify.im6: Invalid JPEG file structure: ... 
1 

如果您在不一致的圖像上調用它,它將返回退出狀態1。您可以使用簡單的循環刪除這些不一致的圖像,如:

for i in *.png; 
    do identify "$i" || rm -f "$i"; 
done 

然後我會嘗試再次下載破碎的文件。

+0

這個解決方案的問題是識別實際上是接受我的部分下載的圖像。我不知道爲什麼,但它確實然後試圖通過它們來轉換哪個返回'convert:corrupt image 2.png @ error/png.c/ReadPNGImage/3958.' – iTry