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

基于最新文件筛选并批量复制多路径文件至目标文件夹

批量搜索并复制含指定片段的最新文件

以下针对不同操作系统提供实用脚本,实现从多路径搜索含指定文件名片段的文件,筛选每个片段对应的最新文件并统一复制到目标文件夹。

Windows(PowerShell 实现)

将以下代码保存为.ps1脚本,替换配置参数后在PowerShell中运行:

# 配置参数 - 替换为你的实际路径和文件名列表
$searchTerms = @("20222023", "其他文件名片段")
$sourcePaths = @("C:\SourceDir1", "D:\SourceDir2", "E:\SourceDir3")
$targetFolder = "F:\TargetDir"

# 创建目标文件夹(不存在则自动创建)
if (-not (Test-Path $targetFolder)) {
    New-Item -ItemType Directory -Path $targetFolder | Out-Null
}

foreach ($term in $searchTerms) {
    $candidateFiles = @()
    # 遍历所有源路径搜索匹配文件
    foreach ($path in $sourcePaths) {
        $matchedFiles = Get-ChildItem -Path $path -Filter "*$term*" -File -Recurse
        if ($matchedFiles) {
            # 按创建时间降序,取当前路径下最新的文件
            $latestInPath = $matchedFiles | Sort-Object CreationTime -Descending | Select-Object -First 1
            $candidateFiles += $latestInPath
        }
    }

    if ($candidateFiles) {
        # 从所有路径的候选文件中,取全局最新的一个
        $finalLatest = $candidateFiles | Sort-Object CreationTime -Descending | Select-Object -First 1
        # 复制到目标文件夹,重名时强制覆盖(可去掉-Force改为手动确认)
        Copy-Item -Path $finalLatest.FullName -Destination $targetFolder -Force
        Write-Host "已复制: $($finalLatest.Name)"
    } else {
        Write-Host "未找到含 '$term' 的文件"
    }
}

说明

  • -Filter "*$term*" 精准匹配文件名中包含指定片段的文件
  • Sort-Object CreationTime -Descending 按创建时间倒序排序,确保筛选出最新文件
  • -Recurse 会递归搜索子文件夹,若无需递归可直接删除该参数

Linux/macOS(Bash 实现)

将以下代码保存为.sh脚本,替换配置参数后添加执行权限并运行:

#!/bin/bash

# 配置参数 - 替换为你的实际路径和文件名列表
SEARCH_TERMS=("20222023" "其他文件名片段")
SOURCE_PATHS=("/home/user/source1" "/mnt/drive/source2" "/opt/source3")
TARGET_FOLDER="/home/user/target"

# 创建目标文件夹(不存在则自动创建)
mkdir -p "$TARGET_FOLDER"

for term in "${SEARCH_TERMS[@]}"; do
    latest_file=""
    latest_timestamp=0

    for path in "${SOURCE_PATHS[@]}"; do
        # 递归搜索含指定片段的文件
        find "$path" -type f -name "*$term*" | while read -r file; do
            # 获取文件修改时间戳(Linux用%Y,macOS替换为%B)
            # Linux 版本
            file_timestamp=$(stat -c "%Y" "$file")
            # macOS 版本:取消注释下面一行,注释上面一行
            # file_timestamp=$(stat -f "%B" "$file")

            if (( file_timestamp > latest_timestamp )); then
                latest_timestamp=$file_timestamp
                latest_file=$file
            fi
        done
    done

    if [ -n "$latest_file" ]; then
        filename=$(basename "$latest_file")
        # 检查目标文件夹是否已存在同名文件,存在则添加编号避免覆盖
        if [ -f "$TARGET_FOLDER/$filename" ]; then
            name="${filename%.*}"
            ext="${filename##*.}"
            counter=1
            while [ -f "$TARGET_FOLDER/$name-$counter.$ext" ]; do
                ((counter++))
            done
            cp "$latest_file" "$TARGET_FOLDER/$name-$counter.$ext"
            echo "已复制(重命名): $name-$counter.$ext"
        else
            cp "$latest_file" "$TARGET_FOLDER/"
            echo "已复制: $filename"
        fi
    else
        echo "未找到含 '$term' 的文件"
    fi
done

说明

  • 执行前需添加权限:chmod +x search_and_copy.sh
  • 若需按创建时间而非修改时间筛选,Linux将stat -c "%Y"改为stat -c "%Z",macOS将stat -f "%B"改为stat -f "%c"
  • find命令默认递归搜索子文件夹,若需限制仅当前目录可添加-maxdepth 1参数

内容的提问来源于stack exchange,提问作者Nathan Seiler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:43:33