本文目录导读:

我来帮你写一个文件批量删除脚本,包含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_DIR 和 FILE_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
使用建议
- 始终先使用预览模式测试
- 确认目标路径正确后再执行
- 定期备份重要数据
- 使用绝对路径避免误删除
- 记录日志便于追踪操作
选择适合你需求的版本,并根据实际情况调整参数。