linux下的find文件查找命令与grep文件内容查找命令

上次帮邻居老王整理硬盘,他急得满头大汗,说硬盘里找不到某个配置文件。
我让他尝试使用“hosts”find /-name 来搜索根目录。
处理完后,他没几分钟就找到了文件,高兴得合不拢嘴。
但后来他问如果文件名不确定,我只知道一个大概怎么办?我让他尝试找到/-name“conf”。
通配符的加入,范围一下子就变宽了。
他很聪明,说如果你想查找最近修改过的mod,为什么不直接使用search /-mtime -7 呢?我很高兴看到他的技术如此出色。

但是我突然想到他的系统是CentOS 7 ,而且他还在使用bash shell。
如果他切换到 Debian 并使用 zsh 或 Fish,搜索选项会有所不同吗?我记得之前在Ubuntu上尝试过,有些参数必须用引号括起来,否则shell会先帮你解析通配符。
例如,搜索/-name“.log”和搜索/-name“\.log”可能会产生不同的效果。
这是你应该注意的事情。

他找到的文件是/etc/hosts文件,但他最后说他实际上想找到/etc/network/interfaces中提到的特定IP地址。
这有点有趣。
直接用grep不是更方便吗? grep "1 9 2 .1 6 8 .1 .1 " /etc/network/interfaces,一语中的。
我已经证明,搜索和 grep 一起使用会更有用,例如在程序日志中搜索包含特定错误的文件。
例如,搜索 /var/log -name ".log" -exec grep -i "error" {} +,这样就可以在所有日志文件中找到包含错误的行。
他点点头,表示这个组合确实好用。

等一下,还有一个问题,就是执行搜索的效率。
文件系统越大,必须扫描的文件就越多,搜索速度就越慢。
它的系统大约有4 T,如果用搜索来查看有时要等一个小时。
如果使用find的-xdev参数将搜索限制到当前文件系统,速度会快很多。
但他似乎不怎么玩大硬盘,当我这么说时,他也没有太注意它们。

最后,他告诉我,下次他搜索文件时,他一定会先尝试查找文件并grep。
我说这个很好,最重要的是你能顺利使用。
但我突然想到,然后文件系统支持inotify,是否可以更动态地监控文件变化?例如,编写一个脚本来持续监视特定目录并在文件发生更改时通知它?这是另一个话题了,下次有机会我们再详细讨论。

linux查找某个目录下所有文件中是否包含某个字符串

/路径/到/目录 |查找 xargs grep“精确字符串” 查找/path/to/directory -type f -mtime -1 查找 - 名称“.txt” 这些命令可以快速找到文件。

linux下查找指定后缀的文件

上周,一位客户问我如何在Linux中查找特定后缀的文件。
我向他解释了如何使用带有正则表达式的 find 命令。
首先需要使用find命令在指定目录下递归查找文件或目录。
在此示例中,我们使用“.”。
代表当前目录。

然后,您需要指定文件类型,使用“-type f”选项来确保只找到文件,而不是目录。

接下来,使用正则表达式来匹配文件名。
对于以 .c 结尾的文件,可以使用正则表达式“.c$”,其中“.c”表示“.c”后面的任何字符。
同样,对于扩展名为 .h 的文件,请使用“.h$”。

但是find命令的正则表达式选项不支持直接使用管道字符,因此不能直接使用“.c|.h”来匹配这两个文件。
一种方法是使用括号和转义字符来构建正则表达式,或者使用 iregex 选项来允许更宽松的正则表达式。
但是,有一种更简单的方法,即使用 find 命令两次或使用带有通配符的 name 选项。

这里有一个简单的方法:可以直接使用带有通配符的name选项来匹配所有.c和.h文件。
命令如下:
bash 找到。
-type f \( -name ".c" -o -name ".h" \)
这里的“-”表示当前目录,“-type f”表示只搜索文件,“\( -name ".c" -o -name ".h" \)”是逻辑组合,表示以.c或.h结尾的文件匹配。

所以,客人,您可以使用这个命令来查找当前目录下所有以.c或.h为后缀的文件。
反正就看你自己了,这个方法还是蛮实用的。
我还在想,如果目录结构很复杂的话这个命令会不会更有效呢?

Linux find命令使用

查找/-name“.conf”-exec{cat}\;列出所有.conf文件的内容
find /var/log -type f -mtime -7 -size +1 M -exec {gzip}\;查找7 天内更改且大于1 M的日志文件
-name ".bash_history" -perm 6 00 -exec 6 4 0 {}\;修改用户主目录下.bash_history文件的权限
find /tmp -type d -exec{rmdir empty}\;删除/var/spool/cron中找到的所有空目录
-type f -ctime +3 0 -delete 删除3 0天未修改的cron任务文件
操作前使用-print进行测试,确认无误后再完成删除或修改操作。