我正在研究一个清除逻辑,我需要删除超过 7 天的日志。
现在日志有两种类型:1)以 developer_ 开头,2)以 _c 结尾
我关心的日志仅/NAS/logs
在此路径中的任何其他子文件夹之后而不是之后。
以下是日志示例:
/NAS/logs/.snapshot/Enterprise_Primary.2019-11-17_1300/developer_score_20191113.log
/NAS/logs/.snapshot/Enterprise_Primary.2019-11-17_1300/trdcvf_03_00_c.log.20191113163858
/NAS/logs/trddffgc004_00_c.log.20191118030038
/NAS/logs/developer_run_score.log.20191118030039
在这里,我想排除隐藏文件夹 .snapshot 中的所有日志,因为我无权访问这些日志。
我正在尝试使用以下命令识别它们,但它也不断给我 .snapshot 文件。
我也尝试了 -prune 选项,但没有帮助。
find /NAS/logs/ -mindepth 1 -type f \( -iname "*_c.log.*" -or -iname "developer_run_*" \) -not -path "./.snapshot/*"
最终命令
find /NAS/logs/ -mindepth 1 -type f \( -iname "*_c.log.*" -or -iname "developer_run_*" \) -not -path "./.snapshot/*"-mtime +7 -delete
谁能帮我从查找中排除该目录?
您的示例文件都不满足您指定的第二个文件名标准。有些文件包含
_c
但没有以 . 结尾的文件_c
。假设您的意思是contains,您可以像这样构造find
命令:这可以分为两部分(
-o
(或)条件):/NAS/logs/.snapshot
被丢弃(修剪)并且在那里不考虑进一步的操作。developer_*
或匹配*_c*
,会列出(打印)。您应该替换
-print
为-delete
,或简单地追加-delete
以删除您匹配的文件。如果要修剪目录的任何实例,
.snapshot
可以像这样修改匹配条件的第一部分现在您已经为您的问题添加了额外的信息,实际上不再需要任何修剪复杂性。你可以使用这个:
(这表明在您的问题中提供完整信息而不是零碎地提供信息的重要性 - 或者根本不提供。)
发生什么了?
我评论中的链接显示 -prune 和 -delete 一起存在问题,因为 -depth。查找和修剪解释
我认为在这里你必须做类似的事情
... -path '*/.snapshot/*' -o ... ... -delete
只有拥有大量数据(和测试),您才会错过“-prune”操作。
find kernel -path '*/sched/*' -o -name '???.c' -exec grep -H 'struct ta' {} +
在 sys.c、pid.c 和 cpu.c 中查找行。
没有
-o
(same as with-a
) 的相同仅在 kernel/sched/psi.c 中给出三行。