Linux之 find | locate 查找命令详情

在Windows操作系统下,我们可以利用文件搜索栏对想要寻找的文件进行搜索,已达到高效,便捷。那在Linux这个命令指示的天堂下,我们怎么来搜索我们想要的东西呢?
其实在Linux下,给出了一种非常强大的命令行指令——find——查找文件和目录,并可对查找的文件执行指定操作
在了解find之前,我们了解一下同样为查找文件的指令locate
一、locate(查找文件)
1、它的工作机制是先建立一个包含系统内所有文件名称及路径的locate数据库,然后查找文件时,可以直接从这个数据库中查找,而不需要再遍历整个文件系统的目录,极大的提高了查询速度。
2、所属包:
slocate
3、使用技巧
首次运行locate指令时,应先使用updatedb命令创建数据库,否则locate指令无法运行
4、参数

-d<数据库文件>或--database=<数据库文件> 
       //设置locate指令使用的数据库,locate指令预设的数据库在/var/lib/slocate目录中,文件名为slocate.db,操作时可使用这个参数改变存放位置
-u
       //创建或更新locate数据库,功能与“updatedb”相同     
-i
       //在查找文件时,忽略文件名中字符的大小写差异
-q
       //静默模式,不显示错误信息
-n<数字>
       //指定最多输出的,查找到的结果数目
-r<规则表达式>或--regexp=<规则表达式>
       //使用基本的POSIX规则表达式进行查找匹配

4、补充说明
locate指令用于查找符合条件的文件,它会在保存文件与目录名称的数据库中查找符合的文件,若没有及时更新数据库,可能会查找失败。
5、实例
不用指定路径

[sent@localhost ~]$ locate pwd    //查找和pwd相关的所有文件
/bin/pwd
/etc/.pwd.lock
/lib/modules/2.6.32-431.el6.i686/kernel/drivers/watchdog/hpwdt.ko
/sbin/unix_chkpwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/cracklib_dict.pwd
/usr/lib/python2.6/lib-dynload/spwdmodule.so
/usr/share/cracklib/cracklib-small.pwd
/usr/share/cracklib/pw_dict.pwd
/usr/share/man/man0p/pwd.h.0p.gz
/usr/share/man/man1/pwd.1.gz

[sent@localhost ~]$ locate /Linux/22   //搜索在Linux下所有以22开头的文件
/home/sent/Linux/22_class
/home/sent/Linux/22_class/file.c
/home/sent/Linux/22_class/meng.c
/home/sent/Linux/22_class/test.c

二、find指令

1、查找文件或目录,并对查找的文件执行指定的操作,find指令查找时时从指定目录向下递归搜索各个子目录,找到满足查找条件的文件后将其显示在标准输出中,并对其进行指定操作。
2、所属包
findutils
3、使用技巧
(1)不带参数使用该命令可以打印当前目录的所有内容

find命令提供的查找条件可以是逻辑运算符与(and)、或(or)、非(not)等组成的复合条件
-a   //表示逻辑与,只有当所有给定的条件满足时,才符合查找条件
-o   //表示逻辑或,只要有一个条件满足,就符合查找条件
!    //表示与所有给定条件相反的文件

(2)、find命令还可以对查找的文件进行相关操作

"-exec"    将所有匹配的文件全部传输给“exec”去执行,但有些系统对该参数传递的命令长度有限制。因此,在使用该命令时,如果查找文件过多,可能出现参数过长,参数溢出等错误因此,可使用"xarg"命令分批处理文件

命令参数:

pathname:   //所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 
-print:    //将匹配的文件输出到标准输出。 
-exec:     //对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,{   }和\;之间存在空格。 
-ok:       //和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

命令选项:

-name          //按照文件名查找文件。
-perm          //按照文件权限来查找文件。
-prune         //使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user          //按照文件属主来查找文件。
-group         //按照文件所属的组来查找文件。
-mtime -n +n   //按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime         //选项,但它们都和-m time选项。
-nogroup       //查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser        //查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2  //查找更改时间比文件file1新但比文件file2旧的文件。
-size n:[c]      //查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:          //在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:         //查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:          //在查找文件时不跨越文件系统mount点。
-follow:         //如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:           //对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n          //查找系统中最后N分钟访问的文件
-atime n         //查找系统中最后n*24小时访问的文件
-cmin n          //查找系统中最后N分钟被改变文件状态的文件
-ctime n         //查找系统中最后n*24小时被改变文件状态的文件
-mmin n          //查找系统中最后N分钟被改变文件数据的文件
-mtime n         //查找系统中最后n*24小时被改变文件数据的文件

find命令常用实例:
(1)根据关键字查找

[sent@localhost ~]$ find -name "*.c"   //查找当前目录下所有以".c"结尾的文件
./Linux/22_class/file.c
./Linux/22_class/meng.c
./Linux/22_class/test.c

(2)、按照目录或文件的权限来查找

//查找/Linux/22_class/下限权为444的文件
find /Linux/22_class/ -perm 444

(3)、按文件大小查找文件

[sent@localhost ~]$ find -size +1000c -print    //当前目录下大于1Kd的文件
.
./.gconf
./.gconf/apps
./.gconf/apps/gnome-terminal
./.gconf/apps/gnome-terminal/profiles
./.gconf/apps/gnome-terminal/profiles/Default
./.gconf/apps/nautilus
./.gconf/apps/nautilus/desktop-metadata
./.gconf/apps/nautilus/desktop-metadata/trash
./.gconf/apps/nautilus/desktop-metadata/home
./.gconf/apps/nautilus/desktop-metadata/autorun@46@volume
./.gconf/apps/nautilus/desktop-metadata/directory

(4)、查找当前所有目录并排序

[sent@localhost ~]$ find -type d | sort   //格式
.
./.cache
./.config
./.config/gnome-disk-utility
./.config/gnome-disk-utility/ata-smart-ignore
./.config/gnome-session
./.config/gnome-session/saved-session
./data
./.dbus
./.dbus/session-bus
./Desktop
./Documents
./Downloads
./.fontconfig
./.gconf
./.gconf/apps
./.gconf/apps/brasero

find之exec
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了。
exec解释:
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 花括号代表前面find查找出来的文件名。

使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

//找到当前目录下的所有普通文件 并列举出来

[sent@localhost 22_class]$ find -type f -exec ls -l {} \;
--wx-wx-wx. 1 sent root 0 Mar 22 09:07 ./file.c
-rw-rw-rw-. 1 sent sent 9 Mar 22 09:59 ./meng.c
-rw-rw-r--. 1 sent sent 0 Mar 22 09:14 ./test.c

find -type f -mtime +5 -exec rm {} \;      //在目录中查找更改时间在5日以前的文件并删除它们
find -name "*.c" -mtime -5 -ok rm {} \;     //在目录中查找更改时间在5日以内的文件并删除它们,在删除之前先给出提示
find -name "*.c" -exec mv {} .. \;          //查找以".c"结尾的文件并移动到上级目录下
find -name "*.c" -exec cp {} test1 \;       //查找文件并copy到test中
find -perm -7 -print | xargs chmod o-w     //在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限,7代表着同时具有rwx权限
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值