You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于文件名日期批量迁移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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:43:08