mirror of
https://github.com/Afilmory/afilmory
synced 2026-02-01 22:48:17 +00:00
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { readdir, stat, unlink } from 'node:fs/promises'
|
|
import { join } from 'node:path'
|
|
|
|
interface FileInfo {
|
|
name: string
|
|
path: string
|
|
mtime: Date
|
|
}
|
|
|
|
export async function cleanupOldOGImages(keepCount = 3) {
|
|
const publicDir = join(process.cwd(), 'public')
|
|
|
|
try {
|
|
const files = await readdir(publicDir)
|
|
const ogImageFiles: FileInfo[] = []
|
|
|
|
// 找到所有 OG 图片文件
|
|
for (const file of files) {
|
|
if (file.startsWith('og-image-') && file.endsWith('.png')) {
|
|
const filePath = join(publicDir, file)
|
|
const stats = await stat(filePath)
|
|
ogImageFiles.push({
|
|
name: file,
|
|
path: filePath,
|
|
mtime: stats.mtime,
|
|
})
|
|
}
|
|
}
|
|
|
|
// 按修改时间排序(最新的在前)
|
|
ogImageFiles.sort((a, b) => b.mtime.getTime() - a.mtime.getTime())
|
|
|
|
// 删除多余的文件
|
|
const filesToDelete = ogImageFiles.slice(keepCount)
|
|
|
|
for (const file of filesToDelete) {
|
|
await unlink(file.path)
|
|
console.info(`🗑️ Deleted old OG image: ${file.name}`)
|
|
}
|
|
|
|
if (filesToDelete.length === 0) {
|
|
console.info('✅ No old OG images to clean up')
|
|
} else {
|
|
console.info(`✅ Cleaned up ${filesToDelete.length} old OG images`)
|
|
}
|
|
|
|
return filesToDelete.length
|
|
} catch (error) {
|
|
console.error('❌ Error cleaning up OG images:', error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
// 如果直接运行此脚本
|
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
cleanupOldOGImages().catch(console.error)
|
|
}
|