请求协助:保留首文件及末两个文件并移动其余至目标目录
保留指定文件夹首文件及最后两个文件、移动其余文件的实现方案
根据需求,我们需要在源文件夹中保留第一个文件(按指定规则排序)和最后两个文件,将其余文件移动到目标目录。以下是不同系统下的实现脚本:
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
相关产品推荐
相关产品推荐

