find排除文件 linux_linux之find忽略指定目录或者文件的查找方法

例1,根据文件属性查找:

find . -type f -name "*config*" ! -path "./tmp/*" ! -path "./scripts/*" ! -path "./node_modules/*"

Explanation:

find . - Start find from current working directory (recursively by default)

-type f - Specify to find that you only want files in the results

-name "*_peaks.bed" - Look for files with the name ending in _peaks.bed

! -path "./tmp/*" - Exclude all results whose path starts with ./tmp/

! -path "./scripts/*" - Also exclude all results whose path starts with ./scripts/

2. 指定忽略的路径

使用find命令在linux系统中查找文件时,有时需要忽略某些目录,可以使用 -prune 参数来进行过滤。不过必须注意:要忽略的路径参数要紧跟着搜索的路径之后,否则该参数无法起作用。

例如:指定搜索/home/zth目录下的所有文件,但是会忽略/home/zth/astetc的路径:

find /home/zth -path "/home/zth/astetc" -prune -o -type f -print

按照文件名来搜索则为:

find /home/zth -path "/home/zth/astetc" -prune -o -type f -name "cdr_*.conf" -print

要忽略两个以上的路径如何处理?

find /home/zth \( -path "/home/zth/astetc" -o -path "/home/zth/etc" \) -prune -o -type f -print

find /home/zth \( -path "/home/zth/astetc" -o -path "/home/zth/etc" \) -prune -o -type f -name "cdr_*.conf" -print

注意:\( 和 \) 前后都有空格。

Linux 系统中使用 `find` 命令查找文件时,若未显示预期的文件,可能的原因及解决方法如下: ### 1. 查找路径不正确 如果指定查找路径不存在或输入错误,`find` 命令将无法找到任何文件。默认情况下,如果不提供路径参数,`find` 将在当前目录及其子目录中搜索文件。 **示例:** ```bash find /invalid/path -name "example.txt" ``` 上述命令将在 `/invalid/path` 中查找文件,但该路径可能不存在,导致没有结果输出。 **解决方法:** 确保提供的查找路径是有效的,并可以通过 `ls` 或 `cd` 命令验证路径是否存在。 --- ### 2. 文件名匹配条件过于严格 如果使用 `-name` 参数进行精确匹配,但文件名大小写不一致或存在拼写错误,可能导致文件未被列出。例如: ```bash find . -name "Example.txt" ``` 此命令只会匹配名称完全为 `Example.txt` 的文件,而不会匹配 `example.txt`。 **解决方法:** 使用 `-iname` 替代 `-name` 进行忽略大小写的搜索: ```bash find . -iname "example.txt" ``` --- ### 3. 文件权限不足 `find` 命令需要足够的权限访问某些目录文件。如果目标文件所在目录的权限受限,用户可能无法查看这些文件。 **解决方法:** 使用 `sudo` 提升权限执行命令: ```bash sudo find /path/to/search -name "*.txt" ``` --- ### 4. 文件类型未明确指定 如果未使用 `-type` 参数限制查找文件类型,可能会因为目录或其他对象的存在而影响结果。例如,以下命令可能不会返回预期结果: ```bash find . -name "file.txt" ``` 如果当前目录下存在名为 `file.txt` 的目录,则不会被匹配。 **解决方法:** 明确指定查找文件类型(如普通文件目录等): ```bash find . -type f -name "file.txt" # 查找普通文件 find . -type d -name "dir_name" # 查找目录 ``` --- ### 5. 使用逻辑运算符时未正确分组 当使用多个条件组合查询时,逻辑运算符(如 `-o` 表示“或”)的优先级可能导致意外行为。例如,以下命令可能不会按预期工作: ```bash find . -name "*.txt" -o -name "*.pdf" -exec echo {} \; ``` 由于 `-exec` 只作用于最后一个条件,因此可能会导致部分结果未被处理。 **解决方法:** 使用括号对条件进行分组,并通过 `\(` 和 `\)` 转义: ```bash find . $ -name "*.txt" -o -name "*.pdf" $ -exec echo {} \; ``` --- ### 6. 输出被重定向或过滤 有时 `find` 命令的结果可能被重定向到其他位置或通过管道传递给其他命令,导致终端未显示结果。 **解决方法:** 检查命令是否包含重定向操作符(如 `>` 或 `|`),并确保输出未被隐藏或修改。 --- ### 7. 文件系统问题 在极少数情况下,文件系统损坏或挂载问题可能导致 `find` 命令无法正确读取文件。 **解决方法:** 运行文件系统检查工具(如 `fsck`)以修复潜在问题。 --- ### 8. 隐藏文件未被包含 默认情况下,`find` 不会排除隐藏文件,但如果使用了额外的过滤条件,可能会无意中跳过隐藏文件。 **解决方法:** 确保未使用类似 `-mindepth` 或 `-maxdepth` 等参数限制搜索深度,或者使用通配符匹配隐藏文件: ```bash find . -name ".*" ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值