zoukankan      html  css  js  c++  java
  • Linux find常用命令

    今天研究一下find的一些常用的命令。

    find格式:find filepath [-option] [-print|-exec|-ok...]

    其中常用的option主要有

    -type d|f|s|b|c|p
    -perm
    -user
    -group
    -mtime
    -depth
    -newer
    -name
    -regex
    !

    下面我们通过例子来研究,事先准备了这样的一个目录结构

    [root@test tmp]# find ./
    ./
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3
    ./test.txt

    他们的仔细信息如下:

    [root@test tmp]# ll -R
    .:
    total 8
    drwxr-xr-x 3 root root 4096 Jul  5 16:13 root
    drwxr-xr-x 3 www  root 4096 Jul  5 16:13 root2
    -rw-r--r-- 1 root root    0 Jul  5 16:31 test.txt
    
    ./root:
    total 4
    drwxrwxrwx 3 root root 4096 Jul  5 16:13 sub1
    
    ./root/sub1:
    total 4
    drwxr-xr-x 3 root root 4096 Jul  5 16:13 sub2
    
    ./root/sub1/sub2:
    total 4
    drwxr-xr-x 2 root root 4096 Jul  5 16:13 sub3
    
    ./root/sub1/sub2/sub3:
    total 0
    
    ./root2:
    total 4
    drwxr-xr-x 3 root root 4096 Jul  5 16:13 sub1
    
    ./root2/sub1:
    total 4
    drwxr-xr-x 2 root root 4096 Jul  5 16:13 sub2
    
    ./root2/sub1/sub2:
    total 0

    -type: type后面可以接上面说的六种参数,表示查找的类型,其中f d是最常用的,分别表示查找文件和目录。

    [root@test tmp]# find ./ -type d
    ./
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3
    [root@test tmp]# find ./ -type f
    ./test.txt

    -perm 权限: perm用于查找某个权限的文件。

    [root@test tmp]# find ./ -perm 777
    ./root/sub1
    [root@test tmp]# find ./ -perm 755
    ./
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3

    -user 用户名: 用于查找特定所有者的文件。

    [root@test tmp]# find ./ -user www
    ./root2
    [root@test tmp]# find ./ -user root
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3
    ./test.txt

    -group 用户名: 用于查找特定用户组的文件。用法与-user一样。

    -mtime -n|+n:-n表示查找n天之内修改过的文件,+n表示查找n天之前修改过的文件。时间轴都以现在的时候为起点。

    [root@test tmp]# find ./ -mtime -1
    .
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3
    ./test.txt
    [root@test tmp]# find ./ -mtime +1
    [root@test tmp]#

    -newer filepath: 查找比filepath更新的文件

    [root@test tmp]# find ./ -newer root2/sub1
    ./
    ./test.txt

    -depth: 先查找处理目录里的内容,然后再处理目录。

    上面的解释可能不太明了,我们来比较下面两个例子:

    [root@test tmp]# find root/       
    root/
    root/sub1
    root/sub1/sub2
    root/sub1/sub2/sub3
    
    [root@test tmp]# find root/ -depth
    root/sub1/sub2/sub3
    root/sub1/sub2
    root/sub1
    root/

    现在是否明白了,不加-depth时,find先处理当前目录,然后接着处理目录下面的文件/目录。反之,先处理目录下面的内容,再反过来处理目录。

    我们再来看上面的例子,加-depth以后,先读取root里的sub1,因为它是目录,于是又先处理了sub1里的sub2,一步一步往下推。等到了sub3以后,因为里面已经没有东西了,所以处理sub3,然后回朔处理sub2,一步一步向上。

    -name 文件名: 根据文件名查找。可以使用?代替一个字符,*代替一字串,[]选择一个列表里的字符。

    [root@test tmp]# find ./ -name "root?"
    ./root2
    [root@test tmp]# find ./ -name "root*"
    ./root2
    ./root
    [root@test tmp]# find ./ -name "[rs]*"
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3
    [root@test tmp]# find ./ -name "[rst]*"
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3
    ./test.txt

    -regex partern: 这就是牛叉的工具,可以使用正则来匹配文件名。需要注意的是,它要求匹配的是完全的路径。

    [root@test tmp]# find ./ -regex 'root'
    [root@test tmp]# find ./ -regex './root'
    ./root
    [root@test tmp]# find /tmp/ -regex '/tmp/root'
    /tmp/root
    [root@test tmp]# find ./ -regex './root.*'
    ./root2
    ./root2/sub1
    ./root2/sub1/sub2
    ./root
    ./root/sub1
    ./root/sub1/sub2
    ./root/sub1/sub2/sub3

    regex使用的正则规则是受-regextype影响的。具体man find看一下吧。

    !: 否定前缀。怎么用呢?直接看例子吧

    [root@test tmp]# find ./ ! -name sub*
    ./
    ./root2
    ./root
    ./test.txt
    
    [root@test tmp]# find ./ ! -name sub* ! -type d
    ./test.txt



  • 相关阅读:
    Python3标准库:fnmatch UNIX式glob模式匹配
    Python3标准库:glob文件名模式匹配
    Python3标准库:pathlib文件系统路径作为对象
    Python3标准库:os.path平台独立的文件名管理
    Python3标准库:statistics统计计算
    36-Docker 的两类存储资源
    第四章-操作列表
    35-外部世界如何访问容器?
    34-容器如何访问外部世界?
    33-容器间通信的三种方式
  • 原文地址:https://www.cnblogs.com/mengzhongshi/p/3174111.html
Copyright © 2011-2022 走看看