Files
tv/getwebdavlist.py

89 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf- -*-
import argparse
from webdav3.client import Client
import os
import time
import re
count=0
def walk(client, current_path="/", output_file=None, replaceroot=None):
items=client.list(current_path)
filetype_re=re.compile(r'\.(png|jpg|jpeg|bmp|gif|doc|nfo|flac|mp3|wma|ape|cue|wav|dst|dff|dts|ac3|eac3|txt)$')
# print(items)
for item in items[1:]:
full_path = f"{current_path}/{item}".replace("//", "/")
try:
# is_dir = client.is_dir(full_path)
is_dir = full_path.endswith("/")
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:
if filetype_re.search(full_path) != None or "BDMV" in full_path:
continue
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()