Linux查找–find命令
首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!
find命令的格式
find pathname -options [ -print -exec -ok ...] pathname #是find命令所查找的目录路径,例如.表示当前目录,/表示根目录 -print #表示find命令将匹配的文件输出到标准输出中 -exec #表示find命令对匹配的文件执行该参数给出的shell命令。相应命令的形式为 ‘cmd’ {} \; -ok #它的作用和-exec一样,只是需要用户交互,更安全find命令的选项
-name #按照文件名查找文件 -perm #按照权限查找文件 -prune #使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略 -user #按照文件属主来查找文件 -group #按照文件数组来查找文件 -mtime -n +n #按照文件的更改时间来查找文件 -n 表示从此刻算起,文件的更改是在n天以内 +n 表示文件的更改时间是在n天以前 find命令还有-atime和-ctime选项,和-mtime选项的时间规定类 似 -nogroup #查找无有效属组的文件,即该文件所属的组在/etc/groups中不存在 -nouser #查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在 -newer file1 ! file2 #查找更改时间比file1新但比file2旧的文件 -type b:表示块设备文件 block d:表示目录 directory c:表示字符设备文件 char p:表示管道文件 pipe l:表示符号链接文件 link f:表示普通文件 file -depth #在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找 -fstype #表示查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息 -mount #表示在查找文件时不跨越文件系统的mount点 -follow #表示如果find命令遇到符号链接文件,就跟踪至链接所指向的文件 -cpio #表示对匹配的文件使用cpio命令,将这些文件备份至磁带设备中find示例:
1、在logs目录下查找更改时间在5日以前的文件并删除它们 find /logs -mtime +5 -exec rm {} \; 2、在当前目录中查找以.log结尾、更改时间在5日以上的文件,并删除,但在删除前给出提示 find . -name “*.log” -mtime +5 -ok rm {} \; 3、先用find命令匹配所有文件名为”passwd*”的文件,然后执行grep看看这些文件中是否存在一个sam的字符串 find / -name "passwd*" -exec grep "sam" {} \; 4、查找当前用户主目录下的所有文件 find ~ 5、查找当前目录下644权限的文件 find . -perm 644 6、查找系统当中所有长度为0的普通文件,并列出它们的完整路径 find / -type f -size 0 -exec ls -l {} \; 7、查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前进行提示 find /var/log -type f -mtime +5 -ok rm {} \; 8、查找当前目录中所有属于root组的文件 find . -group root -exec ls -l {} \; 9、find命令将列出目录中访问时间在7日以内且含有数字后缀的admin.log文件 find . -name "admin.log[0-9]*" -atime -7 -exec ls -l {} \;用xargs来配合find工作
在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但有些系统对传递给exec的命令长度是有限制的,这样,在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是”参数列太长”或”参数列溢出”。这就是xargs命令的用户所在,特别是与find命令一起使用 find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它就可以先处理最先获取的那一部分文件,然后是下一批,并且如此继续下去。 查找root下面的每个文件,然后使用file查看文件的类别 find /root/ -type f | xargs file 查找root下面的777权限的文件,如果找到,都改为644权限 find /root -perm 777 | xargs chmod 644 查找系统中的所有文件,并过滤出文件中带有rmt的文件 find / -type f | xarfs grep rmt grep -rl rmt / #也可以 r代表递归,l代表只列出匹配的文件