https://blog.csdn.net/samsam2013/article/details/78173525
find命令
在linux目录下,当需要找某个文件或者目录时使用,文件和目录都可以查找。find命令常用来搜索目录树中的文件或者目录,并可对搜索出来的目录或文件执行某些操作。
命令格式:find pathname -options [-print -exec -ok…],其中pathname表示在pathname这个目录下寻找。
-options表示find命令的常用选项,主要有
(1)、-name 表明按文件或目录名来进行查找;
(2)、-type 表明将按文件类型来查找;
(3)、-perm 表明将按文件或目录权限来查找;
(4)、-user 表明将文件或目录的所有者查找;
(5)、-group 表明将按文件或目录所属的组来查找;
(6)、-mtime -n (或+n) 表明按照文件的更改时间来查找文件, 时间都是距离此刻的时间,- n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
-print表示将find命令匹配的文件输出到标准输出,实际上用的时候加与不加都是标准输出。
-exec和-ok是一样的含义,都是将find命令匹配到的文件或目录执行-exec 后面接的linux命令。只是-ok以更安全的方式在执行-ok后面接的命令,在执行这些命令前都要对用户进行询问。-exec选项的命令形式:command {} 注意{}和之间有空格。
例:find ./ -name “*.cpp” -exec rm -f {} ;
查找当前目录及其子目录中的.cpp文件,并将其删除。其中{}表示find的结果。
另外,我们看看-print的作用,以及-exec和-ok的区别。首先执行:find ~/test -type d -print -ok ls -l {} ;
执行: find ~/test -type d -exec ls -l {} ;
执行: find ~/test -type d -print -exec ls -l {} ;
对比三个结果可以看出,加-print和不加-print区别在于是否会显示find查找出来的目录。并且-ok与-exec的区别在于-ok在执行命令时会让用户确认。这里find ~/test -type d,在~/test目录下查找目录,结果包括了当前目录,以及显而易见的其他两个目录。然后这个结果又被这样执行:ls -l {查找出来的目录} 。
常用形式:find . -name xxxx 表示在当前目录及其子目录下搜索xxxx文件或目录。实际使用中发现find -name xxxx也可以。
grep
当想知道某个关键字xxx在那些文件里面的那些行出现的时候,用这个命令。这个命令可以配合正则表达式实现强大的功能。
通常用法:grep -nr xxx ./ 在当前目录及其子目录下搜索xxx关键字(递归搜索是-r的作用),并在匹配行号后面显示行号(显示行号是-n的作用)。
这样简单的命令基本满足日常linux系统使用的基本需求。但是还是在一些场景下需要更复杂一点的命令。比如grep -nr xxx ./ 命令会对当前目录及其子目录下面的所有文件进行匹配,很多情况下二进制文件也会出现在结果中,导致每次查找都很耗时,降低了使用该命令的欲望。find、xargs、grep配合使用可以提高一些效率。
find、xargs、grep配合使用。
例:find . -name “*.py”|xargs grep test
从当前目录及其子目录的py文件中搜索test关键字。这里需要注意的一点是:命令中有xargs和没有xargs有明显的差异。比如命令find . -name “.py” |grep test ,我们有时认为只要用管道命令将find和grep串起来就可以实现在py文件中搜索test关键字的目的。但是这个的命令结果并不是我们想要的。这个命令找出的是“.py”文件,并且文件名中含有test的文件。命令结果搜索的是目录或者文件。
原因在于find命令的结果是一个标准输出,这里的标准输出可以认为就是输出一串字符串。利用管道将这个标准输出作为输入传递给grep命令,当然grep会在一串字符串里面进行筛选。
而xargs命令是给其他命令传递参数的一个过滤器,常作为组合多个命令的一个工具。它主要用于将标准输入数据转换成命令行参数,xargs能够处理管道或者标准输入并将其转换成特定命令的命令参数。也就是说find的结果经过xargs后,其实将find找出来的文件名逐个作为了grep的参数。grep再在这些文件内容中查找关键字test。
这些基本的命令还有很多的选项,参数等。以后在实践过程中,遇到有用的,可以提高效率的用法再补充进来。
————————————————
版权声明:本文为CSDN博主「tianlong_cool」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianlong_cool/article/details/78566349