菜单

循序渐进

    Java Oracle MySQL Bash Python Nginx Apache Redis MongoDB Git HTML Javascript Node CSS

最近来访

    使用wget遍历下载整站

    张嘉杰.原创 2014-09-12 shell

    最近同事的博客,域名快到期了,同事说用wget已经把网站静态化镜像了一份,但是文件头mimetype需要批量替换。在这里给朋友们分享一下如何使用wget遍历备份整站目录,并使用sed批量替换文件内容。

    命令如下:

    # wget遍历下载整站命令
    $ wget --random-wait -r -p -np -k -e robots=off -U "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36" "http://baidu.com"

    参数解释:

    --random-wait	--随机等待时间
    -r,		--recursive 递归下载  
    -p,		--page-requisites 下载显示HTML文件的所有图片  
    -np,		--no-parent 不追溯到父目录  
    -k,		--convert-links 转换非相对链接为相对链接  
    -e,		--execute=COMMAND 执行一个 “.wgetrc”命令  
    robots=off	--无视robots.txt  
    -U,		--user-agent=AGENT 设定代理的名称为 AGENT  
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"  --伪装agent

    不清楚伪装agent的朋友往下看截图:

    伪装agent

    首先把非html文件的文件批量替换成后缀为.html的文件。

    # 批量替换符合类型的文件
    $ find . -type f ! -name "*.html" -exec bash -c "mv -f {} {}.html" \;

    把所有文件中的<meta.*charset.*>标签全部替换成<meta http-equiv="content-type" content="text/html;charset=utf-8">

    # 查找并替换非目录文件
    $ find . -type f -name "*.html" -exec bash -c "sed -e 's/<meta.*charset.*>/<meta http-equiv=\"content-type\" content=\"text\/html;charset=utf-8\">/g' {} > {}.tmp; mv -f {}.tmp {}" \;
    
    # 出现以下错误
    sed: RE error: illegal byte sequence
    
    # 加上LC_CTYPE=C属性
    $ find . -type f -name "*.html" -exec bash -c "LC_CTYPE=C sed -e 's/<meta.*charset.*>/<meta http-equiv=\"content-type\" content=\"text\/html;charset=utf-8\">/g' {} > {}.tmp; mv -f {}.tmp {}" \;

    ###到这里基本就完成了。注意find查找的文件路径就好了。:)


    相关参考文章地址:

    illegal-byte-sequence-on-Mac-OSX - http://stackoverflow.com/questions/19242275/re-error-illegal-byte-sequence-on-mac-os-x


    版权属于:jcore.cn

    原文地址:http://www.jcore.cn/2014/09/12/linux-shell-wget

    除非注明,文章均为原创,转载时必须以链接形式注明原始出处。

    分享文章到:

    热门推荐文章