当前位置 主页 > 服务器问题 > Linux/apache问题 >

    linux文件搜索及其它基础命令介绍(3)

    栏目:Linux/apache问题 时间:2019-11-20 11:45

    1、linux中包含大量的文件,对于文件查找,linux提供了find命令。

    find是一个非常有效的工具,它可以遍历目标目录甚至整个文件系统来查找某些文件或目录:

    find [path...] [expression]

    其中expression包括三种:options、tests和actions。多个表达式之间被操作符分隔,当操作符被省略时,表示使用了默认操作符-and。
    当表达式中不包含任何actions时,默认使用-print,也就是打印出搜索到的所有文件,用换行分隔。
    其实可以将三种表达式均视为选项,表示对搜索的某种限制(如-maxdepth表示搜索路径的最大深度)、或对找到的目标文件的某种测试(如-readable判断是否可读)、或对结果采取的某种动作(如-print)。

    选项-name pattern搜索文件名:

    [root@centos7 temp]# find /root/* -name "file?" 
    /root/file1
    /root/temp/file1
    /root/temp/file2
    /root/temp/file3
    /root/temp/file4
    /root/temp/file5
    /root/temp/file6
    /root/temp/file7
    /root/temp/file8
    /root/temp/file9
    [root@centos7 temp]#
    

    此例中搜索目录/root下所有文件,找出匹配file?的文件名,同时由于没有指定action,所以使用默认的-print将结果打印出来。find命令中,搜索路径和某些文件名的表示可以使用shell通配符(见上一篇),但为了避免混淆,处于选项后的通配符需要被引号引起来。

    选项-maxdepth n指定搜索路径的最大深度:

    [root@centos7 ~]# find /root -maxdepth 1 -name "file?" #注意表达式之间的隐含操作符 -and
    /root/file1
    [root@centos7 ~]#
    

    本例中指定最大深度为1,表示只搜索/root目录,而不进入任何它的子目录去搜索。
    和此选项相对应,-mindepth表示指定搜索路径的最小深度。

    选项-user name按照文件属主来查找文件:

    [root@centos7 ~]# find /root/temp -name "file?" -user learner
    /root/temp/file1
    /root/temp/file2
    [root@centos7 ~]# 
    

    或者类似选项-uid n表示按文件属主的uid,-gid n表示按文件所属组的gid,-group name表示按文件所属组。

    选项-mtime n 文件上次内容被修改距离现在n*24小时:

    [root@centos7 temp]# ls -lt file1?
    -rw-r--r-- 1 root root 64 10月 27 15:06 file11
    -rw-r--r-- 1 root root 132 10月 27 13:28 file10
    -rw-r--r-- 1 root root 22 10月 26 21:31 file12
    -rw-r--r-- 1 root root 137 10月 12 16:42 file13
    [root@centos7 temp]# find . -name "file1?" -mtime +5 #五天前
    ./file13
    [root@centos7 temp]# 
    [root@centos7 temp]# find . -name "file1?" -mtime -5 #五天内
    ./file10
    ./file11
    [root@centos7 temp]#
    [root@centos7 temp]# find . -name "file1?" -mtime 5 #刚好五天
    ./file12
    [root@centos7 temp]#

    本例中使用了命令ls的选项-t对文件的时间进行排序,最近被修改的文件在前。选项-mtime n中n可以表示成:

    +n 表示大于n
    -n 表示小于n
    n  表示等于n

    还有其他时间(如atime,ctime)的比较,用法相同。

    选项-newer file表示搜索到的文件比指定的file要‘新'(上次内容被修改离现在时间更短):

    [root@centos7 temp]# find . -name "file1?" -newer file12
    ./file10
    ./file11
    [root@centos7 temp]# 
    

    选项-path pattern文件名匹配pattern(通配符):

    [root@centos7 temp]# find . -name "file1?" -path "./file1[13]"
    ./file11
    ./file13
    [root@centos7 temp]#