• linux基础知识-16


    一、查找文件

    在linux中查找文件可以用locate 和find命令。

    locate在数据库中查找,非常快,但数据库不是实时更新的,有可能找不到。 而find根据文件名来查找,也可以根据所有者,属组,权限,最后修改日期等其它条件来查找。 因为find是实时搜索,所以比较慢。

    二、locate命令

    老陌在测试中发现没有这个命令,所以需要先安装一下, 由于需要在本机和虚拟机中测试,所以两者都需要安装:

    deepin:

    sudo apt install locate
    

    centos:

    yum install mlocate
    

    centos中老陌直接安装发现没有这个软件包,后来搜索一下: yum list | grep locate 发现在mlocate这个软件包中了。

    老陌要找一下smb.conf文件:

    [linux@ccloves exercises]$ locate smb.conf
    /etc/samba/smb.conf
    /usr/share/doc/samba-common/examples/smb.conf.default.gz
    /usr/share/man/man5/smb.conf.5.gz
    /usr/share/samba/smb.conf
    /var/lib/ucf/cache/:etc:samba:smb.conf
    

    发现带有smb.conf字样的全都找到了。 不过第一次测试的时候啥也没有,因为刚安装完,这些文件信息还没有更新到数据库中,所以手动更新一下:

    sudo updatedb
    

    locate命令支持元字符,和bash用法相同,比如:*, ?, []等。 比如搜索:mp4文件

    locate *.mp4
    

    三、find命令

    与locate不同,find命令在文件系统中查找。 几乎所有的文件属性都可以做为查找的条件,比如:按文件名查找,按大小查找等。

    find  <起始目录>  <搜索条件>  <动作> 
    

    (一)起始目录

    起始目录默认就是当前目录,表示在哪儿开始搜索。默认的搜索条件是所有文件,默认的动作是打印搜索到的文件名。

    比如:查找/etc下所有的文件

    [root@localhost ~]# find /etc
    /etc
    /etc/fstab
    /etc/crypttab
    /etc/mtab
    /etc/resolv.conf
    /etc/grub.d
    /etc/grub.d/00_header
    ......
    

    (二) 搜索条件

    通常我们用文件名作为搜索条件,比如搜索/etc下所有的conf文件

    [root@localhost ~]# find /etc -name *.conf
    /etc/resolv.conf
    /etc/depmod.d/dist.conf
    /etc/dracut.conf
    /etc/prelink.conf.d/nss-softokn-prelink.conf
    /etc/prelink.conf.d/fipscheck.conf
    

    这里-name用于限定按文件名搜索,可以用元字符进行匹配搜索.

    搜索条件还有很多,比如:-emtpy 搜索空文件,-group gname 按属组进行搜索, -size 按大小进行搜索,还有按时间,按类型等,这里不一一列举。虽然功能多多,但我们用的时候基本就是-name。

    老陌经常用的就是-name, -size,其它的都没有用过。

    -size 后面跟上文件的大小,比如:

    find . -size +10M
    

    这表示搜索大于10M的文件,如果是-10M表示搜索小于10M的文件,如果没有+,-号则表示搜索等于10M的文件。

    (三) 动作

    动作是指对探索到的文件做什么,默认是打印文件名。

    选项 说明
    -exec command 对匹配的文件执行commmand,用{}表示匹配的文件
    -ok command 与-exec的作用相同,但每个文件操作的动作都需要确认
    -ls 以 ls -dlis的格式输出

    下面老陌以实例说明一下find的用法

    查找用户linux中所有的jpg图片

    find /home/linux  -name *.jpg
    

    查找用户linux中所有的jpg图片,并复制到/tmp/images目录中

    mkdir /tmp/images
    find /home/linux  -name *.jpg -exec cp {} /tmp/images ;
    

    查找的位置: /home/linux
    查找的条件:-name *.jpg,
    执行的动作:复制到/tmp/images中,-exec后面放上要执行的命令,这里用的是cp命令,{}表示查找到的文件, 动作要求以 “;” 结尾,但 “;” 在shell中用于分隔,所以必须用;进行转义。

    好了,这样linux辛辛苦苦下载的图片,被管理员一条命令搬走了。

    老陌对管理员这样的行为感到羞耻,能不能做的更绝一些,下载的png也拿过来。这就是说,如果文件是jpg格式,或者文件是png格式都要复制过来。这样就出现了一种“或”的表达式方式,在find命令中用 -or表示或。

    find /home/linux  -name *.jpg -or -name *.png -exec cp {} /tmp/images ;
    

    解释一下:find命令在/home/linux下查找,找到了jpg或者找到了png之后,去执行cp复制动作,cp把找到的内容复制到/tmp/images目录中。

    上面的-or可以把多种搜索条件组合到一起,在find中还可以进行如下逻辑运算组合:

    • -or 或
    • -and 与
    • -not 非

    测试一下:

    找到/etc下所有不是以.conf结尾的文件。这里用-not进行非运算,也就是不是.conf结尾的文件就打印输出。

    find /etc -not -name *.conf
    

    找到大于2M并且小于5M的文件。这里用-and对两个条件进行组合,表达了大于2M并且小于5M的意思。

    find . -size +2M -and -size -5M
  • 相关阅读:
    ajax的post提交方式和传统的post提交方式哪个更快?
    请问具体到PHP的代码层面,改善高并发的措施有哪些
    TP为什么这个if判断什么都不显示?
    如何用正则匹配这段文本
    七牛上图片总是net::ERR_NAME_NOT_RESOLVED
    该如何来开发这个喜欢的功能呢?
    打包phar文件过大的问题。
    .map(function(item)...)这个是按hashcode自动遍历的,怎么才能按照我想要的顺序遍历呢?
    Java操作Kafka执行不成功
    webkit事件处理
  • 原文地址:https://www.cnblogs.com/myccloves/p/9328537.html
Copyright © 2020-2023  润新知