diff --git a/getwebdavlist.exe b/getwebdavlist.exe new file mode 100644 index 0000000..83c32c7 Binary files /dev/null and b/getwebdavlist.exe differ diff --git a/getwebdavlist.py b/getwebdavlist.py new file mode 100644 index 0000000..f1c26eb --- /dev/null +++ b/getwebdavlist.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +# -*- coding: utf- -*- + +import argparse +from webdav3.client import Client +import os +import time + +count=0 + +def walk(client, current_path="/", output_file=None, replaceroot=None): + items=client.list(current_path) + for item in items[1:]: + full_path = f"{current_path}/{item}".replace("//", "/") + try: + is_dir = client.is_dir(full_path) + except: + continue + if is_dir: # 判断是否为目录 + #global count + #count=count+1 + #if count%4==0: + # time.sleep(1) + try: + walk(client, full_path, output_file, replaceroot) + except: + pass + else: + size = client.info(full_path).get('size', 0) + if replaceroot!=None: + if replaceroot=="": + full_path=os.path.join("/",*full_path.split("/")[2:]) + else: + full_path=os.path.join("/",replaceroot,*full_path.split("/")[2:]) + print(f"{full_path}\t{size}") + if output_file != None: + output_file.write(f"{full_path}\t{size}\n") + + +from urllib.parse import urlparse + +def extract_url_components(url): + """分解 URL 为 schema(协议)、hostname(主机地址)、path(路径)""" + parsed = urlparse(url) + + # 提取核心组件 + schema = parsed.scheme or "http" # 默认协议处理 + hostname = f"{parsed.hostname}:{parsed.port}" # 自动过滤端口和认证信息 + path = parsed.path.rstrip('/') or '/' # 路径标准化 + + return schema, hostname, path + + +def main(): + parser = argparse.ArgumentParser(description='快速遍历WebDAV目录') + parser.add_argument('--url', type=str, required=True, help='WebDAV URL') + parser.add_argument('--username', type=str, required=True, help='WebDAV username') + parser.add_argument('--password', type=str, required=True, help='WebDAV password') + parser.add_argument('--output', type=str, required=True, help='outputfile') + parser.add_argument('--replaceroot', type=str, default=None, required=False, help='替换根目录名称') + args = parser.parse_args() + + schema, hostname, path = extract_url_components(args.url) + print(schema,hostname,path) + + options = { + 'webdav_hostname': schema+"://"+hostname, + 'webdav_root': '/', + 'webdav_login': args.username, + 'webdav_password': args.password, + 'disable_check': True, # 跳过 SSL 证书验证:ml-citation{ref="6" data="citationList"} + 'disable_head': True, # 跳过 SSL 证书验证:ml-citation{ref="6" data="citationList"} + } + client = Client(options) + + print("WebDAV URL:", args.url) + output_file = open(args.output, mode="a", encoding="utf-8") + walk(client, path, output_file,args.replaceroot) + output_file.close() + +if __name__ == '__main__': + main() diff --git a/run.bat b/run.bat index 4f9de82..1ff9fc2 100644 --- a/run.bat +++ b/run.bat @@ -1,3 +1,3 @@ @echo off -webdav_simulator.exe --alist_config "http://192.168.1.2:5678/,,#http://192.168.1.3:5678,alist-1234-5678," xy115-all.txt.xz +webdav_simulator.exe --alist_config "http://192.168.1.2:5678/,,#http://192.168.1.3:5678,alist-1234-5678," "xy115-all.txt.xz#xy.txt.xz" diff --git a/run.sh b/run.sh index 2e78481..c41ec89 100644 --- a/run.sh +++ b/run.sh @@ -18,4 +18,4 @@ cd "${progdir}" mkdir tmp chmod 777 tmp export TMPDIR=tmp -./webdav_simulator.amd64 --alist_config "http://192.168.1.2:5678,,#http://192.168.1.3:5678,alist-1234-5678," xy115-all.txt.xz +./webdav_simulator.amd64 --alist_config "http://192.168.1.2:5678,,#http://192.168.1.3:5678,alist-1234-5678," "xy115-all.txt.xz#xy.txt.xz" diff --git a/webdav_simulator.amd64 b/webdav_simulator.amd64 index 469e48e..de28e68 100644 Binary files a/webdav_simulator.amd64 and b/webdav_simulator.amd64 differ diff --git a/webdav_simulator.arm64 b/webdav_simulator.arm64 index 064fa1e..e221c3c 100644 Binary files a/webdav_simulator.arm64 and b/webdav_simulator.arm64 differ diff --git a/webdav_simulator.exe b/webdav_simulator.exe index 6621d0f..da08bf8 100644 Binary files a/webdav_simulator.exe and b/webdav_simulator.exe differ diff --git a/xy.txt.xz b/xy.txt.xz new file mode 100644 index 0000000..14423b1 Binary files /dev/null and b/xy.txt.xz differ diff --git a/xy115-all.txt.xz b/xy115-all.txt.xz index 8329ce7..c619e9e 100644 Binary files a/xy115-all.txt.xz and b/xy115-all.txt.xz differ