linux find prune exec 排除某目录或文件 执行

查找cache目录下不是html的文件

  1. find ./cache ! -name '*.html' -type f

列出当前目录下的目录名,排除includes目录,后面的-print不能少

  1. find . -path './includes' -prune -o -type d -maxdepth 1 -print

排除多个目录,”(“前是带”\”的

  1. find / \( -path /home/ -o -path /root \) -prune -nouser -type f -exec ls -l {} \;

 

find查找文件的时候排除某个或几个文件或目录

比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件

 

find /usr/sam -path "/usr/sam/dir1" -prune -o -print

find [-path ..] [expression] 在路径列表的后面的是表达式

-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。

这个表达式组合特例可以用伪码写为

 

if -path "/usr/sam" then
           -prune
else
           -print

避开多个文件夹

 

find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print

圆括号表示表达式的结合。

\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。

查找某一确定文件,-name等选项加在-o 之后

 

#find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print

 

linux下的常用命令find,加上不同的参数,可以使你很容易的找到需要的文件,但是有些时候,你在查找文件的同时,可能不需要在某文件夹下查找,这时候-prune就用上了。

比如在当前目录下寻找pl后缀的文件,不在scripts下寻找。

find . -path './scripts' -prune -o -name '*.pl' -print

### 使用 `find` 命令排除指定文件目录 #### 排除特定目录 为了在查找过程中排除某个特定的目录及其子目录,在 `find` 命令中可以使用 `-path` 者更常用的 `-prune` 关键字。例如,要忽略名为 `gmp` 的目录并仅搜索 `.log` 文件: ```bash find . -path "./gmp" -prune -o -name "*.log" -print ``` 这条指令会遍历当前路径下的所有项,当遇到路径匹配 `"./gmp"` 时停止进一步深入该分支(`-prune`);对于其他不被排除的位置,则继续检查是否满足名称模式为 `*.log` 并打印出来[^1]。 #### 排除多种类型的文件 若希望过滤掉几种不同扩展名的文件而保留其余部分,可借助逻辑运算符组合多个条件实现这一目标。比如想要跳过 Python 脚本 (`*.py`) 和 Shell 脚本 (`*.sh`) 文件的话: ```bash find . -type f ! \( -name "*.py" -o -name "*.sh" \) ``` 这里通过否定表达式 (!) 来反转测试结果,从而只选出那些既不是 `.py` 又不是 `.sh` 结尾的常规文件(-type f)[^2]。 #### 对查找到的目标执行额外操作 有时不仅限于简单地列出符合条件的对象列表,还可能需要针对每一个发现的结果采取行动,这时就可以利用 `-exec` 参数附加一条多条 shell 指令给每个命中项处理。假设现在有一个需求是要删除所有的临时工作文件 (`.tmp`) 同时不触及任何位于 `/var/tmp/` 下的内容: ```bash find / -path "/var/tmp" -prune -o -name "*.tmp" -exec rm {} + ``` 上述命令会在根分区(/)内寻找除了 `/var/tmp` 外的所有 `.tmp` 文件,并安全地移除它们。注意这里的 `{}` 是占位符代表每次迭代中的具体项目,而结尾处的加号(+)表示尽可能多地打包参数传递给单次调用的外部程序以提高效率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值