本文目录导读:

Linux/Unix Shell 脚本
删除超过指定大小限制的文件
#!/bin/bash
# 删除超过指定大小的文件
# 用法: ./delete_oversized.sh /path/to/directory 100M
TARGET_DIR="${1:-.}" # 默认为当前目录
SIZE_LIMIT="${2:-100M}" # 默认为100MB
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 $TARGET_DIR 不存在"
exit 1
fi
echo "将删除目录 $TARGET_DIR 中超过 $SIZE_LIMIT 的文件"
echo "文件列表:"
# 找出并显示超过限制的文件
find "$TARGET_DIR" -type f -size +"$SIZE_LIMIT" -exec ls -lh {} \;
# 确认删除
read -p "确认删除以上文件? (y/n): " confirm
if [[ $confirm == [yY] ]]; then
find "$TARGET_DIR" -type f -size +"$SIZE_LIMIT" -delete
echo "删除完成"
else
echo "操作取消"
fi
删除指定天数之前的文件
#!/bin/bash
# 删除指定天数之前的文件
# 用法: ./delete_old_files.sh /path/to/directory 7
TARGET_DIR="${1:-.}"
DAYS="${2:-7}"
FILE_PATTERN="${3:-*}" # 可选文件模式,如 "*.log"
echo "将删除目录 $TARGET_DIR 中 $DAYS 天前的文件"
find "$TARGET_DIR" -type f -name "$FILE_PATTERN" -mtime +$DAYS -exec ls -lh {} \;
read -p "确认删除? (y/n): " confirm
if [[ $confirm == [yY] ]]; then
find "$TARGET_DIR" -type f -name "$FILE_PATTERN" -mtime +$DAYS -delete
echo "删除完成"
fi
Windows PowerShell 脚本
删除超过指定大小限制的文件
# delete_oversized.ps1
param(
[string]$Directory = ".",
[string]$SizeLimit = "100MB"
)
# 转换为字节
$limitBytes = [long]($SizeLimit -replace 'MB','' -replace 'GB','' )
if ($SizeLimit -match 'GB') { $limitBytes *= 1GB }
elseif ($SizeLimit -match 'MB') { $limitBytes *= 1MB }
elseif ($SizeLimit -match 'KB') { $limitBytes *= 1KB }
Write-Host "将删除 $Directory 中超过 $SizeLimit 的文件" -ForegroundColor Yellow
# 查找文件
$files = Get-ChildItem -Path $Directory -File | Where-Object { $_.Length -gt $limitBytes }
if ($files.Count -eq 0) {
Write-Host "没有找到超过限制的文件" -ForegroundColor Green
exit
}
# 显示文件列表
$files | ForEach-Object {
Write-Host "$($_.FullName) - $([math]::Round($_.Length/1MB, 2)) MB"
}
# 确认删除
$confirm = Read-Host "确认删除以上文件? (y/n)"
if ($confirm -eq 'y') {
$files | Remove-Item -Force
Write-Host "删除完成" -ForegroundColor Green
} else {
Write-Host "操作取消" -ForegroundColor Yellow
}
Python 脚本(跨平台)
#!/usr/bin/env python3
# delete_oversized.py
import os
import sys
import argparse
from pathlib import Path
def convert_size(size_str):
"""将大小字符串转换为字节"""
size_map = {
'b': 1,
'kb': 1024,
'mb': 1024**2,
'gb': 1024**3,
'tb': 1024**4
}
try:
num = float(size_str[:-2].strip())
unit = size_str[-2:].lower()
return int(num * size_map[unit])
except:
try:
num = float(size_str[:-1].strip())
unit = size_str[-1].lower()
return int(num * size_map[unit + 'b'] if unit != 'b' else num)
except:
return None
def delete_oversized_files(directory, size_limit, min_age=None, dry_run=True):
"""删除超过大小限制的文件"""
directory_path = Path(directory)
if not directory_path.exists():
print(f"错误: 目录 {directory} 不存在")
return
limit_bytes = convert_size(size_limit)
if not limit_bytes:
print(f"错误: 无法解析大小 {size_limit}")
return
deleted_list = []
for file_path in directory_path.rglob('*'):
if not file_path.is_file():
continue
try:
size = file_path.stat().st_size
mtime = file_path.stat().st_mtime
if size > limit_bytes:
deleted_list.append(file_path)
print(f"发现大文件: {file_path} - {size / (1024*1024):.2f} MB")
except:
continue
if not deleted_list:
print("没有找到超过限制的文件")
return
print(f"\n共找到 {len(deleted_list)} 个超过限制的文件")
if dry_run:
print("试运行模式,未实际删除")
return
confirm = input("确认删除这些文件? (y/n): ")
if confirm.lower() == 'y':
for file_path in deleted_list:
try:
file_path.unlink()
print(f"已删除: {file_path}")
except Exception as e:
print(f"删除失败: {file_path} - {e}")
print("删除完成")
else:
print("操作取消")
def main():
parser = argparse.ArgumentParser(description='批量删除超出限制的文件')
parser.add_argument('directory', help='目标目录')
parser.add_argument('-s', '--size', default='100MB', help='大小限制 (如: 100MB, 1GB, 500KB)')
parser.add_argument('--dry-run', action='store_true', help='试运行模式')
parser.add_argument('--delete', action='store_true', help='实际删除(默认只显示)')
args = parser.parse_args()
delete_oversized_files(args.directory, args.size, dry_run=not args.delete)
if __name__ == "__main__":
main()
带安全机制的高级脚本
#!/usr/bin/env python3
# safe_cleanup.py
import os
import hashlib
import json
from pathlib import Path
from datetime import datetime
class SafeCleanup:
def __init__(self, base_dir):
self.base_dir = Path(base_dir)
self.log_file = self.base_dir / "cleanup_log.json"
def calculate_hash(self, file_path):
"""计算文件哈希"""
sha256_hash = hashlib.sha256()
with open(file_path, "rb") as f:
for byte_block in iter(lambda: f.read(4096), b""):
sha256_hash.update(byte_block)
return sha256_hash.hexdigest()
def safe_delete(self, file_path, backup=True):
"""安全删除文件"""
if backup:
# 创建备份副本
backup_dir = self.base_dir / "trash_backup"
backup_dir.mkdir(exist_ok=True)
backup_path = backup_dir / file_path.name
try:
# 重命名而不是直接删除
if backup_path.exists():
backup_path = backup_dir / f"{file_path.name}_{datetime.now():%Y%m%d_%H%M%S}"
file_path.rename(backup_path)
print(f"已移动到回收站: {file_path} -> {backup_path}")
return backup_path
except Exception as e:
print(f"备份失败: {e}")
return None
else:
file_path.unlink()
print(f"已永久删除: {file_path}")
return file_path
def cleanup_oversized(self, size_limit_mb, file_patterns=None, dry_run=True):
"""清理超出大小限制的文件"""
limit_bytes = size_limit_mb * 1024 * 1024
all_files = []
# 根据文件模式筛选
if file_patterns:
for pattern in file_patterns:
all_files.extend(list(self.base_dir.rglob(pattern)))
else:
all_files = list(self.base_dir.rglob('*'))
# 筛选超过限制的文件
oversized = []
for file_path in all_files:
if file_path.is_file() and file_path.stat().st_size > limit_bytes:
oversized.append(file_path)
if not oversized:
print("没有找到超过限制的文件")
return
print(f"找到 {len(oversized)} 个超过 {size_limit_mb}MB 的文件:")
delete_list = []
for file_path in oversized:
size_mb = file_path.stat().st_size / (1024 * 1024)
print(f" {file_path} - {size_mb:.2f}MB")
delete_list.append(file_path)
if dry_run:
print("\n[试运行模式] 未实际删除文件")
return
confirm = input(f"确认删除这 {len(delete_list)} 个文件? (y/n): ")
if confirm.lower() == 'y':
result = []
for file_path in delete_list:
backup_path = self.safe_delete(file_path, backup=True)
result.append({
'original': str(file_path),
'backup': str(backup_path) if backup_path else None,
'size_mb': file_path.stat().st_size / (1024 * 1024),
'deleted_at': datetime.now().isoformat()
})
# 保存日志
self.save_log(result)
print(f"删除完成,已备份到 trash_backup 目录")
def save_log(self, entries):
"""保存删除日志"""
try:
if self.log_file.exists():
data = json.loads(self.log_file.read_text())
else:
data = []
data.extend(entries)
self.log_file.write_text(json.dumps(data, indent=2))
except Exception as e:
print(f"保存日志失败: {e}")
if __name__ == "__main__":
cleanup = SafeCleanup(Path("."))
cleanup.cleanup_oversized(size_limit_mb=100, file_patterns=['*.log', '*.tmp'], dry_run=True)
使用说明
基本使用方法:
Shell (Linux/Mac):
# 添加执行权限 chmod +x delete_oversized.sh # 运行 ./delete_oversized.sh /path/to/directory 50MB
PowerShell (Windows):
# 运行 .\delete_oversized.ps1 -Directory "C:\path\to\dir" -SizeLimit "100MB"
Python (跨平台):
# 试运行模式(推荐先用这个) python delete_oversized.py /path/to/directory --dry-run # 实际删除 python delete_oversized.py /path/to/directory --delete --size 50MB
安全建议:
- 始终先试运行(
--dry-run),确认要删除的文件 - 启用备份功能,以防误删
- 使用日志记录,方便追踪
- 设置合理的限制条件,避免删除重要文件
- 定期清理而不是一次性大批量删除
这些脚本都包含了确认机制,确保您在删除前能够复查一遍,选择最适合您工作环境的版本使用。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播