Skip to content

wget batch download gitlab uploads

landon edited this page Sep 30, 2018 · 1 revision

wget批量下载gitlab uploads的文件和图片

  1. 背景

    • 下载gitlab的uploads文件,因为wiki可以直接clone,但是上传的文件和图片却无法下载(除非你有gitlab的服务器权限)
    • 之前尝试用写Java工具下载
      • 遍历所有的.md文件
      • 正则表达式搜索"/uploads/[a-z0-9]+/\S+.[a-z]+" 找到上传的文件
      • 然后使用http或者调用wget直接下载
  2. 遇到的问题

    1. 写工具这种方式相对比较麻烦
    2. 一个最大的问题是用http或者wget下载会遇到权限的问题,因为如果要访问或者下载需要gitlab的ldap验证,否则无法下载真正的文件
    3. 浏览器这边直接访问拼接出来的下载url也是先跳转到验证界面,验证通过后才可继续下载
  3. 解决方案

    1. 不在自己使用工具,直接使用wget的批量下载功能
    2. 关于wget的权限验证,可以使用cookies的方式验证(ldap和http验证不同,http的话可以直接指定--http-user选项)
  4. 测试sample命令

    • wget指定了参数--header,指定cookie,这样就可以ldap验证成功

    • --exclude-directories 排除某些目录(不能排除wikis目录,否则uploads也被排除)

    • TODO 目前测试发现无法直接指定uploads目录,只能指定上层目录,然后通过exclude排除不需要的目录如commit

    /usr/local/bin/wget -r -np -nH -R index.html --header="Cookie:sidebar_collapsed=false; remember_user_token=xxx; _gitlab_session=yyy"  https://...gitlab/zzz
    
    
  5. 注意的问题

    • cookie获取可以直接通过chrome浏览器直接获取或者通过开发者工具copy as curl获取cookie部分
    • Runtime.exec() 不等同于直接执行command line命令,exec有很多重载形式
    • du -h查看uploads的文件大小,最好在open一下是否打开
  6. 实战步骤

    1. git clone wikis
    2. git remote -v 查看地址
    3. wget批量下载,指定cookies验证,排除某些目录,下载uploads
  7. 参考

Clone this wiki locally