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

请求协助:保留首文件及末两个文件并移动其余至目标目录

保留指定文件夹首文件及最后两个文件、移动其余文件的实现方案

根据需求,我们需要在源文件夹中保留第一个文件(按指定规则排序)和最后两个文件,将其余文件移动到目标目录。以下是不同系统下的实现脚本:

Linux/macOS Shell 脚本

基础版(文件名无空格)

# 定义源目录和目标目录
SOURCE_DIR="/your/source/folder/path"
TARGET_DIR="/your/target/folder/path"

# 创建目标目录(如果不存在)
mkdir -p "$TARGET_DIR"

# 获取按名称排序的文件列表(仅文件,排除子目录)
files=($(ls -p "$SOURCE_DIR" | grep -v / | sort))
total_files=${#files[@]}

# 文件数≤3时无需操作
if [ $total_files -le 3 ]; then
    echo "文件数不足3个,无需执行移动操作"
    exit 0
fi

# 标记需要保留的文件:第一个、倒数第二个、最后一个
keep_files=("${files[0]}" "${files[$total_files-2]}" "${files[$total_files-1]}")

# 遍历文件,移动非保留项
for file in "${files[@]}"; do
    if [[ ! " ${keep_files[@]} " =~ " ${file} " ]]; then
        mv "$SOURCE_DIR/$file" "$TARGET_DIR/"
        echo "已移动:$file"
    fi
done

兼容含空格文件名的版本

如果文件名包含空格或特殊字符,建议使用 find 命令生成文件列表:

SOURCE_DIR="/your/source/folder/path"
TARGET_DIR="/your/target/folder/path"

mkdir -p "$TARGET_DIR"

# 生成按名称排序的文件名列表
mapfile -t files < <(find "$SOURCE_DIR" -maxdepth 1 -type f -printf "%f\n" | sort)
total_files=${#files[@]}

if [ $total_files -le 3 ]; then
    echo "文件数不足3个,无需执行移动操作"
    exit 0
fi

keep_files=("${files[0]}" "${files[$total_files-2]}" "${files[$total_files-1]}")

for file in "${files[@]}"; do
    if [[ ! " ${keep_files[@]} " =~ " ${file} " ]]; then
        mv "$SOURCE_DIR/$file" "$TARGET_DIR/"
        echo "已移动:$file"
    fi
done

Windows PowerShell 脚本

# 定义源目录和目标目录
$sourceDir = "C:\your\source\folder\path"
$targetDir = "C:\your\target\folder\path"

# 创建目标目录(如果不存在)
if (!(Test-Path $targetDir)) {
    New-Item -ItemType Directory -Path $targetDir | Out-Null
}

# 获取按名称排序的文件对象
$files = Get-ChildItem -Path $sourceDir -File | Sort-Object Name
$totalFiles = $files.Count

if ($totalFiles -le 3) {
    Write-Host "文件数不足3个,无需执行移动操作"
    exit
}

# 标记需要保留的文件
$keepFiles = @($files[0], $files[$totalFiles-2], $files[$totalFiles-1])

# 遍历移动非保留项
foreach ($file in $files) {
    if ($keepFiles -notcontains $file) {
        Move-Item -Path $file.FullName -Destination $targetDir
        Write-Host "已移动:$($file.Name)"
    }
}

自定义排序规则说明

如果需要按修改时间而非文件名排序:

  • Shell 脚本:将 sort 替换为适配时间排序的逻辑(比如配合 ls -lt 提取时间字段排序)
  • PowerShell 脚本:将 Sort-Object Name 替换为 Sort-Object LastWriteTime

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:40:37