首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从查找和删除中排除隐藏目录

从查找和删除中排除隐藏目录
EN

Unix & Linux用户
提问于 2019-11-18 10:33:24
回答 2查看 967关注 0票数 0

我正在处理一个清除逻辑,在这个逻辑中,我需要删除超过7天的日志。

现在日志有两种类型: 1)以developer_开头,2)以_c结尾

我所关心的日志只是在/NAS/logs之后,而不是在此路径中的任何其他子文件夹之后。

以下是原木样品:

代码语言:javascript
运行
复制
/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选项,但没有帮助。

代码语言:javascript
运行
复制
  find /NAS/logs/  -mindepth 1 -type f  \( -iname "*_c.log.*" -or -iname "developer_run_*"  \) -not -path "./.snapshot/*"

最终命令

代码语言:javascript
运行
复制
find /NAS/logs/  -mindepth 1 -type f  \( -iname "*_c.log.*" -or -iname "developer_run_*"  \) -not -path "./.snapshot/*"-mtime +7 -delete

有人能帮我把那个目录排除在查找之外吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-11-18 11:28:31

没有一个示例文件满足您指定的第二个文件名标准。有些文件包含_c,但没有一个以_c结尾。假设您的意思是包含,您可以像这样构造find命令:

代码语言:javascript
运行
复制
find /NAS/logs -type d -path '/NAS/logs/.snapshot' -prune -o -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print

这可以分为两部分( -o (或)条件):

  1. /NAS/logs/.snapshot匹配的树路径被丢弃(剪枝),不再考虑进一步的操作。
  2. 列出(打印)了七天前修改的文件,其名称与developer_**_c*相匹配。

您应该将-print替换为-delete,或者简单地添加-delete以删除匹配的文件。

如果要修剪目录.snapshot的任何实例,可以修改匹配条件的第一部分,如下所示

代码语言:javascript
运行
复制
find /NAS/logs -type d -name '.snapshot' -prune -o ...

现在,您已经为您的问题添加了额外的信息,实际上不再需要修剪复杂性了。你可以用这个:

代码语言:javascript
运行
复制
find /NAS/logs -maxdepth 1 -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print

(这表明了在你的问题中提供完整信息的重要性,而不是零敲碎打地提供信息-或者根本不提供信息。)

票数 3
EN

Unix & Linux用户

发布于 2019-11-18 13:20:01

我也尝试过-prune选项,但没有帮助。

然后发生了什么?

我的评论中的链接显示-prune和-delete在一起存在一个问题,因为-depth。找到剪枝解释

我觉得你得做点什么

... -path '*/.snapshot/*' -o ... ... -delete

只有大量的数据(和测试),你才会错过‘剪枝’的行动。

find kernel -path '*/sched/*' -o -name '???.c' -exec grep -H 'struct ta' {} +

在sys.c、pid.c和cpu.c中找到行。

-o相同(与-a相同)只在内核/sched/psi.c中给出三行代码。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/552755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档