once upon a time in shanghai:假如...... 令人精疲力尽的windows
四月 19

很简单的事情,nana同学的blog从msn space搬到了akaka之后,一直以blog的外观太过于老土为由拒不更新。于是就只能教育一下nana同学如何从themes.wordpress.org上找到感觉还行的theme,并记载下相关的下载地址,然后给我提交一份工作列表,我好把这些theme都给nana同学放上去......

结果nana同学太敬业啦,一口气给我发了20好几个候选项过来,看着密密麻麻的那堆链接,看得我一阵老眼昏花......

看了看wget的man手册,好加在还有个-i选项支持直接下载一个列表文件内的所有链接,很好!哗哗哗的就把那堆东西给下完了。可是ls一下,发现下载下来的东西尽是一些名字为download.php?theme=XXXX的东东----虽然一样可以用unzip解压开,可是看着那堆乱七八糟的名字,就是感觉不爽。找找看wget有没有什么选项可以把下载的文件名改为http地址跳转之后的文件名?看了wget的man手册半天,试了两下,好像没啥头绪,那就google吧,结果花了要20分钟也没有找到合理的选项,真是郁闷。

咱还得赶紧把这些theme给放上去呢,要不然肯定会遭投诉的。只好放弃研究wget的想法了。试了一下,居然没有办法用xargs来使用unzip把这些压缩包一个个解压,真是郁闷,只好用Awk来生成解压的脚本文件,要不然一个个的解压下来,准把我老人家累死。以下是用awk生成解压脚本的命令:

  1. ls |awk {'print "unzip "$1'}>unzip_themes.sh

之后就没啥技术含量的活可以说的了,很快的就通知nana同学可以去挑选自己喜欢的theme啦。看了看时间,已经花了要半个小时了。

因为懒惰,所以要节约劳动,最后花费了更多的时间,看来已经成为我的恶习了,是为懒惰系列故事之九。

附录:

搞到最后还很郁闷,留了这么两个问题记录下来,留待有缘人来给我答疑解惑。或者有朝一日,我老人家福至心灵,忽然就融会贯通了,再过来填答案吧:

  • Q:wget真的就没有法度直接把类似于http://themes.wordpress.net/download.php?theme=182这样的地址直接下载为真正下载的zip文件的名字吗?说实在的,我真的很讨厌那个download.php?theme=182这样的名字!
    A:
  • Q:为什么unzip不支持xargs传递过来的参数?在那个只有一堆download.php?theme=XXX的目录里面,我执行以下的语句,为什么unzip会给我报错?

    1. ls |xargs unzip

    unzip给我报了这样的一堆错误:

    1. Archive:  download.php?theme=1224
    2. caution: filename not matched:  download.php?theme=128
    3. caution: filename not matched:  download.php?theme=1453
    4. caution: filename not matched:  download.php?theme=182
    5. caution: filename not matched:  download.php?theme=214
    6. caution: filename not matched:  download.php?theme=234
    7. caution: filename not matched:  download.php?theme=273
    8. caution: filename not matched:  download.php?theme=396
    9. caution: filename not matched:  download.php?theme=402
    10. caution: filename not matched:  download.php?theme=45
    11. caution: filename not matched:  download.php?theme=579
    12. caution: filename not matched:  download.php?theme=58
    13. caution: filename not matched:  download.php?theme=65
    14. caution: filename not matched:  download.php?theme=66
    15. caution: filename not matched:  download.php?theme=67
    16. caution: filename not matched:  download.php?theme=8
    17. caution: filename not matched:  download.php?theme=899
    18. caution: filename not matched:  download.php?theme=960
    19. caution: filename not matched:  download.php?theme=967
    20.  
    21. 1 archive had fatal errors.

    说实在的,我真的是摸不清楚unzip的脾气了。
    A:

感谢大家来回答我的问题啊!

9 Responses to “令人费解的wget和unzip;以及真的很好用的Awk—-懒惰故事系列之九”

  1. 馒头 Says:

    :em52: 你好辛苦啊~~~~~~~~~` :em60:

  2. coolzsb Says:

    能让nana同学安家乐业是很不容易的

    2007年四月 20 日 8:32 pm,馒头大声嚷嚷道:

    :em52: 你好辛苦啊~~~~~~~~~` :em60:

    签名
    ------
    有困难要上,没有困难也要制造困难上

  3. nana Says:

    真是太感谢工程师了啊,我对于我目前的外观甚是满意啊,还有,据说也因此你不是还有所收获麻, :em55:

  4. Undefined Says:

    使用 xargs 中的 max-lines 选项控制命令的 argument 个数...

    今天闲逛时发现一个有趣的问题 大概意思就是使用 xargs 把一个 zip 文件列表传给 unzip 解压时会报 "caution: filename not matched"这样的错误 感觉要是我自己碰到这种情况也会有同样问题的,于是...

  5. iakuf Says:

    有困难要上,没有困难也要制造困难上

    为什么每天还要签个很个性的名字来"气"我们.

  6. marcus Says:

    你期待中的文件名其实存在于http的头部中,浏览器支持这个头部,但是wget可能不支持
    $ curl -I 'http://themes.wordpress.net/download.php?theme=182'
    HTTP/1.1 200 OK
    X-Powered-By: PHP/4.4.6
    Content-type: application/zip
    Content-Disposition: attachment; filename="fading-flowers-10.zip"
    Date: Mon, 07 Apr 2008 10:05:49 GMT
    Server: LiteSpeed
    Connection: close

    所以在脚本里分析一下Content-Disposition,弄到filename字段的值,然后利用wget的 -O 选项就行啦

  7. 小眼8X@基本输入输出 Says:

    2008年四月 7 日 6:08 pm,marcus大声嚷嚷道:

    你期待中的文件名其实存在于http的头部中,浏览器支持这个头部,但是wget可能不支持
    $ curl -I

    'http://themes.wordpress.net/download.php?theme=182'
    HTTP/1.1 200 OK
    X-Powered-By: PHP/4.4.6
    Content-type: application/zip
    Content-Disposition: attachment; filename="fading-flowers-10.zip"
    Date: Mon, 07 Apr 2008 10:05:49 GMT
    Server: LiteSpeed
    Connection: close

    所以在脚本里分析一下Content-Disposition,弄到filename字段的值,然后利用wget的 -O 选项就行啦

    原来文件名在这里啊,也帮我解惑了,非常感谢!

  8. 小眼8X@基本输入输出 Says:

    刚才又手痒去翻了翻,发现新版(1.11.1) wget 已经试验性地支持 Content-Disposition 了,需要手动启用 --content-disposition 选项。详见GNU Wget 1.11.1 Manual

  9. coolzsb Says:

    感谢楼上两位同学的支持啊,这两个困扰了好久的问题总算都解决了

    签名
    ---
    这个,将近一年的问题了---虽然一直没有记得还有这两个问题 :em15:

Leave a Reply