根据年龄和 TXT 目录列表的清理脚本

根据年龄和 TXT 目录列表的清理脚本

这是我的媒体服务器:

我有一个包含我所有电视节目的文件夹,对于某些节目,我会无限期地保留它们,而对于其他节目,我想在它们的保质期达到 90 天后清除它们。

因此,我想根据路径填充一个节目列表,这些节目希望在 TXT 文件中于 90 天后被清除,并且有一个计划脚本将每天运行该列表。

这样,我就可以从 TXT 列表中添加或删除节目,然后知道我有 90 天的时间观看该列表中的任何节目,之后这些节目的剧集将被删除。

当然,我想清除视频文件而不是其他文件,例如季节文件夹、艺术品等。因此,典型的扩展名列表 - mkv、mp4、mpg、mpeg、avi、xvid、ts 将会消失,但文件夹结构不会消失。

我已经找到了很多关于清除 X 天前的文件的方法,但没有找到这么具体的。

当我在 Windows PC 上拥有媒体文件时,我运行了一个名为自动删除的简单程序,您可以在其中指定文件夹、日期和扩展名,它会处理所有事情,但自从转移到 Ubuntu 后,我发现情况不再一样了。

任何帮助均感激不尽。

答案1

不需要任何额外的程序甚至脚本,find只需一次调用即可完成。

我假设你有一个这样的目录树:

.
├── delete
├── GoT
│   ├── artwork.png
│   ├── S10E05_Everybody_dies.mkv
│   └── stream.ts
├── TBBT
│   └── Season_01
│       ├── file.avi
│       └── notes
└── The_Wire
    ├── current.mp4
    └── wallpaper.jpg

该文件的内容delete如下:

/full/path/to/GoT
/full/path/to/TBBT

find命令将在每个目录中搜索具有指定扩展名且使用期限超过89天的文件:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

我的示例的输出是:

/full/path/to/GoT/stream.ts
/full/path/to/GoT/S10E05_Everybody_dies.mkv
/full/path/to/TBBT/Season_01/file.avi

使用它来测试命令。如果它执行了你想要的操作,只需将其添加-delete结束执行删除的命令:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89 -delete

您可以定期运行这最后一个命令,例如使用 cronjob(但SHELL=/bin/bash首先在 crontab 中设置,默认cron使用dash!) - 关键字@daily可能会有用:

@daily find $(</path/to/delete) …

关于路径中的空格的说明:我真的建议总体上删除目录和文件名中的空格,但如果您确实需要在路径中有空格,您可能需要IFS=$'\n'首先设置为仅允许换行符作为参数的分隔符。

答案2

好的,这是我的反馈。

是的,脚本可以运行,但是有一个大警告。

如果找不到“删除”文件,它无论如何都会成功运行,但针对所有文件,并适用于您在命令行中的任何位置。

  • 有没有办法检查文件是否存在?

我尝试在删除文件中添加引号来处理空格,但效果不佳。所以我执行了你的建议。

这是确切的运行命令:

IFS=$'\n' && find $(</opt/deletelist) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

我确实得到了我预期的结果,所以它确实有效。

相关内容