最近無名要關了,我家寶貝之前也在那裡擺了一些東西,只好趕緊打包下載回來,不過無名還真是沒有誠意,相簿的內容居然只給下載的檔案列表,例如:
xxx-data \ -- album \ ---- 1.txt ---- 2.txt ---- 3.txt
檔案列表裡全部都是相片的網址,例如
http://f12.wretch.yimg.com/xxx/1/1234567890.jpg?nsf4.gf6y6RHJJatuXZpN3YJNVARsYRt.bw0RMZubyvcsQMPtA4Tpw--
雖然官方有提供方法讓人大量下載,但都需要額外安裝軟體,還是不夠方便,所以一時心血來潮,寫了個 shell script 讓大家可以方便的把相簿的內容下載回來。
Script
這個程式只能應用在 unix-like 系統,如果是 windows 的使用者,還是用官方提供的方案比較簡單一些。
進入備份資料中的 album 資料夾,然後執行
find . -name "*.txt" -exec awk -F"[/\?]" '{ if($5!=""){cmd="mkdir -p " $5; system(cmd); cmd="curl -o " $5 "/" $6 " " $0; system(cmd)} }' {} +
程式會在 album 目錄下,依據相簿的編號,建立新的資料夾,並把下載下來的照片放到該資料夾中。
奇怪的 Awk Bug
環境: Mac OS 10.8.2
譬如下載列表檔案 1.txt 的內容如下
$ cat 1.txt http://f12.wretch.yimg.com/xxx/1/1234567890.jpg?nsf4.gf6y6RHJJatuXZpN3YJNVARsYRt.bw0RMZubyvcsQMPtA4Tpw--
執行下列指令
awk -F"[/\?]" '{print "a = " $0 " b = " $1}' 1.txt
應該要 print 出
a = http://f12.wretch.yimg.com/xxx/1/1234567890.jpg?nsf4.gf6y6RHJJatuXZpN3YJNVARsYRt.bw0RMZubyvcsQMPtA4Tpw-- b = http:
但實際上卻是
b = http:f12.wretch.yimg.com/xxx/1/1234567890.jpg?nsf4.gf6y6RHJJatuXZpN3YJNVARsYRt.bw0RMZubyvcsQMPtA4Tpw--
感覺像是 $0
不會讓字串指標向前移動,所以後來的字串全部從位置 0 的地方開始輸出,把正確的內容給覆蓋掉了。即使我把 $0
設給另一個變數,或是改用 sprintf
都有一樣的結果。然而如果把 $0
放到字串的最末端,則不會產生問題,姑且把它當作一個 feature 來看,幸好只要改變參數的位置就可以繞過這個問題。
本來以為是 Mac OS X 內建的 awk 太舊了
$ /usr/bin/awk --version awk version 20070501
不過從 Homebrew 安裝了新版的 (awk version 20121220) 之後,或是改用 gawk,問題依舊存在,或許是更底層的 lib 有問題吧!暫時也懶得去追究了。
Pingback: 「時年珈啡」 — 午後悠閒來杯咖啡 | Pupudog 's Blog