本文目录导读:

Bash版本(Linux/macOS)
#!/bin/bash
# 批量删除指定日期前的文件
# 用法: ./delete_old_files.sh /path/to/directory "2024-01-01"
# 检查参数
if [ $# -ne 2 ]; then
echo "用法: $0 <目录路径> <日期(YYYY-MM-DD)>"
echo "示例: $0 /home/user/logs 2024-01-01"
exit 1
fi
TARGET_DIR="$1"
CUTOFF_DATE="$2"
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 '$TARGET_DIR' 不存在"
exit 1
fi
# 检查日期格式
if ! date -d "$CUTOFF_DATE" > /dev/null 2>&1; then
echo "错误: 日期格式无效,请使用 YYYY-MM-DD 格式"
exit 1
fi
echo "开始处理目录: $TARGET_DIR"
echo "删除 $CUTOFF_DATE 之前的文件"
# 计算秒数差,用于比较
CUTOFF_SECONDS=$(date -d "$CUTOFF_DATE" +%s)
# 遍历文件并删除
find "$TARGET_DIR" -type f | while read -r file; do
# 获取文件的修改时间(秒数)
FILE_TIME=$(stat -c "%Y" "$file")
if [ "$FILE_TIME" -lt "$CUTOFF_SECONDS" ]; then
echo "删除: $file (修改时间: $(date -d @$FILE_TIME '+%Y-%m-%d %H:%M:%S'))"
rm "$file"
fi
done
echo "完成! 已删除指定日期前的文件"
增强版Bash脚本(带文件匹配模式和预览功能)
#!/bin/bash
# 批量删除指定日期前的文件(增强版)
# 功能: 支持文件模式匹配,预览模式,递归处理
show_help() {
echo "用法: $0 [选项] <目录路径> <日期(YYYY-MM-DD)>"
echo "选项:"
echo " -p, --pattern PATTERN 文件匹配模式 (默认: *)"
echo " -d, --dry-run 预览模式,不实际删除"
echo " -r, --recursive 递归处理子目录 (默认: 是)"
echo " -v, --verbose 显示详细信息"
echo " -h, --help 显示帮助信息"
echo ""
echo "示例:"
echo " $0 /home/user/logs 2024-01-01"
echo " $0 -p \"*.log\" /var/log 2024-06-01"
echo " $0 -d -p \"*.tmp\" /tmp 2024-01-01"
}
# 默认参数
PATTERN="*"
DRY_RUN=false
RECURSIVE=true
VERBOSE=true
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-p|--pattern)
PATTERN="$2"
shift 2
;;
-d|--dry-run)
DRY_RUN=true
shift
;;
-r|--recursive)
RECURSIVE=true
shift
;;
-v|--verbose)
VERBOSE=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
break
;;
esac
done
# 检查参数数量
if [ $# -ne 2 ]; then
show_help
exit 1
fi
TARGET_DIR="$1"
CUTOFF_DATE="$2"
# 检查目录
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 '$TARGET_DIR' 不存在"
exit 1
fi
# 验证日期
if ! date -d "$CUTOFF_DATE" > /dev/null 2>&1; then
echo "错误: 无效的日期格式,请使用 YYYY-MM-DD"
exit 1
fi
CUTOFF_SECONDS=$(date -d "$CUTOFF_DATE" +%s)
DELETED_COUNT=0
echo "目标目录: $TARGET_DIR"
echo "截止日期: $CUTOFF_DATE"
echo "文件模式: $PATTERN"
echo "递归处理: $([ "$RECURSIVE" = true ] && echo "是" || echo "否")"
echo "预览模式: $([ "$DRY_RUN" = true ] && echo "是" || echo "否")"
echo ""
# 构建find命令
FIND_CMD="find \"$TARGET_DIR\" -type f -name \"$PATTERN\""
if [ "$RECURSIVE" = false ]; then
FIND_CMD="$FIND_CMD -maxdepth 1"
fi
# 遍历并处理文件
eval "$FIND_CMD" | while read -r file; do
FILE_TIME=$(stat -c "%Y" "$file")
if [ "$FILE_TIME" -lt "$CUTOFF_SECONDS" ]; then
FILE_DATE=$(date -d @$FILE_TIME '+%Y-%m-%d %H:%M:%S')
if [ "$DRY_RUN" = true ]; then
[ "$VERBOSE" = true ] && echo "[预览] 将删除: $file ($FILE_DATE)"
else
[ "$VERBOSE" = true ] && echo "删除: $file ($FILE_DATE)"
if rm "$file" 2>/dev/null; then
((DELETED_COUNT++))
else
echo "错误: 无法删除 $file" >&2
fi
fi
fi
done
if [ "$DRY_RUN" = true ]; then
echo ""
echo "预览完成,未实际删除文件"
else
echo ""
echo "完成! 已删除 $DELETED_COUNT 个文件"
fi
PowerShell版本(Windows)
<#
.SYNOPSIS
批量删除指定日期前的文件
.DESCRIPTION
删除指定目录中创建时间早于指定日期的文件
.PARAMETER Path
要处理的目录路径
.PARAMETER Date
截止日期 (格式: yyyy-MM-dd)
.PARAMETER Pattern
文件匹配模式 (默认: *.*)
.PARAMETER Recurse
是否递归处理子目录
.PARAMETER WhatIf
预览模式,不实际删除
.EXAMPLE
.\Delete-OldFiles.ps1 -Path "C:\Logs" -Date "2024-01-01"
.\Delete-OldFiles.ps1 -Path "C:\Temp" -Date "2024-06-01" -Pattern "*.tmp" -WhatIf
#>
param(
[Parameter(Mandatory=$true)]
[string]$Path,
[Parameter(Mandatory=$true)]
[datetime]$Date,
[string]$Pattern = "*.*",
[switch]$Recurse = $true,
[switch]$WhatIf
)
# 检查路径
if (-not (Test-Path $Path)) {
Write-Error "路径 '$Path' 不存在"
exit 1
}
# 检查日期
if ($Date -gt (Get-Date)) {
Write-Warning "指定日期在未来,没有文件可以被删除"
exit 0
}
Write-Host "目标目录: $Path"
Write-Host "截止日期: $($Date.ToString('yyyy-MM-dd'))"
Write-Host "文件模式: $Pattern"
Write-Host "递归处理: $Recurse"
Write-Host "预览模式: $WhatIf"
Write-Host ""
# 获取文件列表
$files = Get-ChildItem -Path $Path -Filter $Pattern -File -Recurse:$Recurse
$deletedCount = 0
$totalSize = 0
foreach ($file in $files) {
# 检查文件的最后写入时间
if ($file.LastWriteTime -lt $Date) {
if ($WhatIf) {
Write-Host "[预览] 将删除: $($file.FullName) (修改时间: $($file.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')))"
} else {
try {
$size = $file.Length
Remove-Item -Path $file.FullName -Force -ErrorAction Stop
Write-Host "删除: $($file.FullName) (修改时间: $($file.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')))"
$deletedCount++
$totalSize += $size
} catch {
Write-Error "无法删除 '$($file.FullName)': $_"
}
}
}
}
if ($WhatIf) {
Write-Host "`n预览完成,未实际删除文件"
} else {
$sizeFormatted = if ($totalSize -gt 1GB) {
"{0:N2} GB" -f ($totalSize / 1GB)
} elseif ($totalSize -gt 1MB) {
"{0:N2} MB" -f ($totalSize / 1MB)
} else {
"{0:N2} KB" -f ($totalSize / 1KB)
}
Write-Host "`n完成! 已删除 $deletedCount 个文件,释放空间: $sizeFormatted"
}
使用方法
Bash脚本
# 赋予执行权限 chmod +x delete_old_files.sh # 基本用法 ./delete_old_files.sh /path/to/directory 2024-01-01 # 增强版用法(预览模式) ./delete_old_files.sh -d -p "*.log" /var/log 2024-06-01 # 只删除当前目录 ./delete_old_files.sh -r false /tmp 2024-01-01
PowerShell脚本
# 基本用法 .\Delete-OldFiles.ps1 -Path "C:\Logs" -Date "2024-01-01" # 预览模式 .\Delete-OldFiles.ps1 -Path "C:\Temp" -Date "2024-06-01" -Pattern "*.tmp" -WhatIf # 不递归子目录 .\Delete-OldFiles.ps1 -Path "C:\Data" -Date "2024-01-01" -Recurse:$false
安全建议
- 先使用预览模式:首次使用时建议先使用预览模式确认会删除哪些文件
- 备份重要数据:在执行删除前建议备份重要文件
- 使用绝对路径:避免使用相对路径导致误删
- 权限检查:确保有足够的权限操作目标目录
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播