如何写文件批量删除脚本

wen 实用脚本 32

本文目录导读:

如何写文件批量删除脚本

  1. Windows PowerShell 脚本
  2. Linux Bash 脚本
  3. 常用删除模式示例
  4. 安全最佳实践
  5. 交互式删除脚本
  6. 使用建议

我来帮你写一个文件批量删除脚本,包含Windows和Linux两个版本,并附带安全保护措施。

Windows PowerShell 脚本

# delete_files.ps1 - 批量删除文件脚本
# 配置参数
$targetDirectory = "C:\path\to\your\directory"  # 目标目录
$filePattern = "*.tmp"                          # 文件匹配模式
$logFile = "C:\path\to\delete_log.txt"         # 日志文件路径
# 安全模式(true=只显示要删除的文件,不实际删除)
$previewMode = $true
# 获取要删除的文件列表
$filesToDelete = Get-ChildItem -Path $targetDirectory -Filter $filePattern -Recurse
# 显示文件数量
Write-Host "找到 $($filesToDelete.Count) 个匹配文件" -ForegroundColor Yellow
# 预览或删除文件
foreach ($file in $filesToDelete) {
    if ($previewMode) {
        Write-Host "[预览] 会删除: $($file.FullName)" -ForegroundColor Gray
    } else {
        try {
            Remove-Item -Path $file.FullName -Force
            Write-Host "[已删除] $($file.FullName)" -ForegroundColor Green
            # 记录删除日志
            "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 已删除: $($file.FullName)" | 
                Out-File -FilePath $logFile -Append
        } catch {
            Write-Host "[错误] 删除失败: $($file.FullName) - $_" -ForegroundColor Red
        }
    }
}
# 完成提示
if ($previewMode) {
    Write-Host "`n预览完成,确认要删除请将 `$previewMode 设为 false" -ForegroundColor Cyan
} else {
    Write-Host "`n删除完成,共删除 $($filesToDelete.Count) 个文件" -ForegroundColor Cyan
}

使用前: 修改 $targetDirectory$filePattern 变量 运行: .\delete_files.ps1(需先执行 Set-ExecutionPolicy RemoteSigned

Linux Bash 脚本

#!/bin/bash
# delete_files.sh - 批量删除文件脚本
# 配置参数
TARGET_DIR="/path/to/your/directory"   # 目标目录
FILE_PATTERN="*.log"                   # 文件匹配模式
LOG_FILE="/path/to/delete_log.txt"     # 日志文件路径
# 安全模式(1=只显示不删除,0=执行删除)
PREVIEW_MODE=1
# 查找文件
if [ "$PREVIEW_MODE" -eq 1 ]; then
    echo "=== 预览模式 ==="
    find "$TARGET_DIR" -type f -name "$FILE_PATTERN" -print | while read file; do
        echo "[预览] 会删除: $file"
    done
    FILE_COUNT=$(find "$TARGET_DIR" -type f -name "$FILE_PATTERN" | wc -l)
    echo "共找到 $FILE_COUNT 个文件"
    echo "若要执行删除,请将 PREVIEW_MODE 改为 0"
else
    echo "=== 开始删除 ==="
    find "$TARGET_DIR" -type f -name "$FILE_PATTERN" -print | while read file; do
        if rm -f "$file"; then
            echo "[已删除] $file"
            echo "$(date '+%Y-%m-%d %H:%M:%S') - 已删除: $file" >> "$LOG_FILE"
        else
            echo "[错误] 删除失败: $file"
        fi
    done
    FILE_COUNT=$(find "$TARGET_DIR" -type f -name "$FILE_PATTERN" | wc -l)
    echo "删除完成"
fi

使用前: 修改 TARGET_DIRFILE_PATTERN 变量,并执行 chmod +x delete_files.sh

常用删除模式示例

按文件类型删除

# 删除所有 .tmp 文件
find . -type f -name "*.tmp" -delete
# 删除所有 .log 文件(保留7天内)
find . -type f -name "*.log" -mtime +7 -delete

按文件名模式删除

# 删除包含 "backup" 的文件
find . -type f -name "*backup*" -delete
# 删除以 "test" 开头的文件
find . -type f -name "test*" -delete

按文件大小删除

# 删除大于 100MB 的文件
find . -type f -size +100M -delete
# 删除空文件 (0字节)
find . -type f -empty -delete

安全最佳实践

永远先预览

# 预览模式,查看将删除哪些文件
find /target/dir -type f -name "*.tmp" -print

使用回收站代替直接删除(Linux)

# 创建回收函数
function safe_delete() {
    mkdir -p ~/.trash
    mv "$1" ~/.trash/
}
# 使用示例
find . -type f -name "*.tmp" | while read f; do safe_delete "$f"; done

备份重要数据

# 删除前先备份
tar -czf backup_$(date +%Y%m%d).tar.gz /target/dir/*.tmp
# 然后删除
rm -f /target/dir/*.tmp

交互式删除脚本

#!/bin/bash
# interactive_delete.sh - 交互式批量删除
echo "=== 交互式批量删除 ==="
echo "文件模式(如:*.tmp): "
read PATTERN
echo "目录路径: "
read DIRECTORY
# 显示匹配的文件
echo "找到以下文件: "
find "$DIRECTORY" -type f -name "$PATTERN" -exec ls -lh {} \;
echo "确认删除这些文件?(y/n): "
read CONFIRM
if [ "$CONFIRM" = "y" ]; then
    find "$DIRECTORY" -type f -name "$PATTERN" -delete
    echo "已删除"
else
    echo "取消删除"
fi

使用建议

  1. 始终先使用预览模式测试
  2. 确认目标路径正确后再执行
  3. 定期备份重要数据
  4. 使用绝对路径避免误删除
  5. 记录日志便于追踪操作

选择适合你需求的版本,并根据实际情况调整参数。

抱歉,评论功能暂时关闭!