群晖NAS定时任务:递归删旧文件并保留顶层指定TXT文件
问题解答
原脚本是否会递归保留所有txt文件?
是的,你的脚本确实会递归保留整个目录树中所有的*.txt文件。因为find /volume1/TempShare/ -not -name "*.txt" -mtime +7 -delete的逻辑是:遍历目标目录下所有层级的内容,只要文件名不是*.txt且修改时间超过7天,就执行删除。反过来,所有层级(包括子目录)的*.txt文件都会被排除在删除操作之外,完全不符合你“仅保留顶层目录txt文件”的需求。
如何修改脚本以实现需求?
你需要拆分逻辑,分别处理顶层目录和子目录的内容:
#!/bin/bash # 处理顶层目录:删除非*.txt且超过7天的文件/目录 find /volume1/TempShare/ -maxdepth 1 -not -name "*.txt" -mtime +7 -delete # 处理子目录及以下:递归删除所有超过7天的内容(含子目录中的txt) find /volume1/TempShare/ -mindepth 2 -mtime +7 -delete
逻辑说明:
-maxdepth 1:限制仅处理/volume1/TempShare/下的直接子项(即顶层内容),排除掉所有*.txt文件后,删除剩余超过7天的内容;-mindepth 2:仅处理深度≥2的内容(也就是顶层目录下的子目录及其内部所有文件),不管文件类型,只要修改时间超过7天就删除,这样子目录中的*.txt也会被清理。
关于群晖NAS中find工具的版本与文档
群晖DSM系统的find工具通常基于BusyBox(精简版)或GNU findutils(完整版),取决于你的NAS机型和DSM版本:
- 查看版本:通过SSH登录NAS后,执行命令
find --version即可查看具体版本信息; - 查看帮助:
- 如果是BusyBox版本,执行
find --help可以查看内置的精简帮助文档; - 如果是GNU版本,执行
man find可以查看完整的手册页;
- 如果是BusyBox版本,执行
- 补充说明:部分机型默认预装的是BusyBox版本,若需要完整的GNU工具集及文档,可以通过群晖的Package Center安装「GNU Core Utilities」套件。
内容的提问来源于stack exchange,提问作者Ben Edwards
相关产品推荐
相关产品推荐

