基于文件名日期批量迁移WebDAV服务器文件至年月分层目录的脚本需求
基于文件名日期批量迁移WebDAV服务器文件至年月分层目录的脚本需求
嗨,我来帮你搞定这个批量整理文件的需求!结合你提到的WebDAV环境、按年月(月份转英文缩写)分层、自动建目录、跳过已存在文件这些要求,我整理了两种主流平台的实用方案:
一、Linux/macOS 平台(Bash 脚本 + Rclone)
首先推荐用rclone来处理WebDAV的文件操作,它对WebDAV的支持非常完善,不用手动挂载也能直接操作。如果还没安装rclone,先通过包管理器安装(比如apt install rclone或者brew install rclone),并先配置好WebDAV的远程连接(命名为webdav_sync)。
脚本示例
#!/bin/bash # 配置参数 WEBDAV_REMOTE="webdav_sync:Sync" # WebDAV上的源目录 TARGET_DIR="/path/to/your/target/drive" # 目标驱动器路径 # 遍历WebDAV目录下的所有文件 rclone lsjson "$WEBDAV_REMOTE" | jq -r '.[] | select(.IsFile==true) | .Name' | while read filename; do # 提取文件名中的日期部分(前8位) date_str=${filename:0:8} year=${date_str:0:4} month_num=${date_str:4:2} # 将月份数字转换为英文缩写(比如07→Jul) month_name=$(date -d "$year-$month_num-01" +%b) # 构建目标目录路径 target_subdir="$TARGET_DIR/$year/$month_name" # 自动创建目录(如果不存在) mkdir -p "$target_subdir" # 复制文件,跳过已存在的文件(rclone的--ignore-existing参数) rclone copy "$WEBDAV_REMOTE/$filename" "$target_subdir" --ignore-existing done
补充说明
- 如果已经把WebDAV目录挂载到本地了,可以把
rclone相关命令换成普通的文件操作:比如用find /path/to/mounted_webdav/Sync -type f遍历文件,用cp -n来跳过已存在的文件。 - 要每天自动运行,只需把这个脚本加入crontab:比如执行
crontab -e,添加一行0 0 * * * /path/to/your/script.sh(每天凌晨0点执行)。
二、Windows 平台(PowerShell 脚本)
Windows下可以用PowerShell来实现,同样支持直接操作WebDAV,或者结合rclone使用。下面是纯PowerShell的实现方案:
脚本示例
# 配置参数 $webDavPath = "\\your-webdav-url\Sync" # WebDAV源目录路径 $targetDir = "D:\YourTargetDrive" # 目标驱动器路径 # 获取WebDAV目录下的所有文件 Get-ChildItem -Path $webDavPath -File | ForEach-Object { $filename = $_.Name # 提取日期部分 $dateStr = $filename.Substring(0, 8) $year = $dateStr.Substring(0, 4) $monthNum = $dateStr.Substring(4, 2) # 转换月份为英文缩写 $monthName = [DateTime]::ParseExact($monthNum, "MM", $null).ToString("MMM") # 构建目标目录 $targetSubDir = Join-Path -Path $targetDir -ChildPath "$year\$monthName" # 自动创建目录 if (-not (Test-Path -Path $targetSubDir)) { New-Item -ItemType Directory -Path $targetSubDir | Out-Null } # 复制文件,跳过已存在的文件(-NoClobber参数) Copy-Item -Path $_.FullName -Destination $targetSubDir -NoClobber }
补充说明
- 如果WebDAV需要认证,可以先通过
net use命令挂载:net use Z: \\your-webdav-url /user:username password,然后用Z盘路径操作。 - 要每天自动运行,打开「任务计划程序」,创建一个新任务,设置触发条件为每天,操作选择启动PowerShell脚本,路径填你的脚本文件路径。
关键需求的满足情况
- ✅ 自动创建年/月份目录:脚本里用
mkdir -p(Bash)或New-Item(PowerShell)实现目录自动创建 - ✅ 跳过已存在文件:分别用
rclone --ignore-existing、cp -n(Bash)或Copy-Item -NoClobber(PowerShell)实现 - ✅ 月份转英文缩写:通过
date +%b(Bash)或DateTime.ParseExact(PowerShell)完成转换 - ✅ 每日自动运行:结合crontab(Linux)或任务计划程序(Windows)实现定时执行
备注:内容来源于stack exchange,提问作者carnock
相关产品推荐
相关产品推荐

