天天看點

find指令

  • 根據檔案名或者正規表達式進行搜尋

    選項 

    - name

    選項

    - iname

    ,忽略大小寫
    [root@vm2 find-test]# find /opt/find-test -name "new.sh"
    /opt/find-test/new.sh
    /opt/find-test/n/new.sh
    # 忽略大小寫
    [root@vm2 find-test]# find /opt/find-test -iname "new.sh"
    /opt/find-test/new.sh
    /opt/find-test/n/new.sh
    /opt/find-test/n/new.SH
    /opt/find-test/new.SH      
    比對多個條件中的一個,可以使用or條件
    [root@vm2 find-test]# find /opt/find-test \( -name "new.sh" -o -name "new.SH" \)
    /opt/find-test/new.sh
    /opt/find-test/n/new.sh
    /opt/find-test/n/new.SH
    /opt/find-test/new.SH      

    -path

    ,可以使用通配符比對檔案路徑

    -ipath

    [root@vm2 find-test]# find /opt/find-test -path  "*new.sh"
    /opt/find-test/new.sh
    /opt/find-test/n/new.sh
    # 忽略大小寫
    [root@vm2 find-test]# find /opt/find-test -ipath  "*new.sh"
    /opt/find-test/new.sh
    /opt/find-test/n/new.sh
    /opt/find-test/n/new.SH
    /opt/find-test/new.SH      

    -regex

    ,正則比對

    -iregex

    [root@vm2 find-test]# find . -regex ".*\(\.py\|\.sh\)$"
    ./new.sh
    ./new.py
    ./n/old.sh
    ./n/new.sh
    ./n/new.py
    # 忽略大小寫
    [root@vm2 find-test]# find . -iregex ".*\(\.py\|\.sh\)$"
    ./new.sh
    ./new.py
    ./n/old.sh
    ./n/new.sh
    ./n/new.py
    ./n/new.PY
    ./n/new.SH
    ./new.PY
    ./new.SH      
  • 否定參數

    !

    表示否定
    [root@vm2 find-test]# find . ! -name new.txt      
  • 基于目錄深度的搜尋

    -maxdepth

    指定最大深度

    -mindepth

    指定最小深度
    # 預設查找
    [root@vm2 find-test]# find . -name new.sh 
    ./new.sh
    ./n/new.sh
    ./n/n2/new.sh
    # 最大深度
    [root@vm2 find-test]# find . -maxdepth 1 -name new.sh 
    ./new.sh
    [root@vm2 find-test]# find . -maxdepth 2 -name new.sh 
    ./new.sh
    ./n/new.sh
    [root@vm2 find-test]# find . -maxdepth 3 -name new.sh 
    ./new.sh
    ./n/new.sh
    ./n/n2/new.sh
    # 最小深度
    [root@vm2 find-test]# find . -mindepth 1 -name new.sh 
    ./new.sh
    ./n/new.sh
    ./n/n2/new.sh
    [root@vm2 find-test]# find . -mindepth 2 -name new.sh 
    ./n/new.sh
    ./n/n2/new.sh
    [root@vm2 find-test]# find . -mindepth 3 -name new.sh 
    ./n/n2/new.sh      
  • 根據檔案類型搜尋

    -type

    ,對檔案搜尋進行過濾
    # d:目錄
    [root@vm2 find-test]# find . -type d 
    .
    ./n
    ./n/n2      

    f:普通檔案

    l:符号連結

    d:目錄

    c:字元裝置

    b:塊裝置

    s:套接字

    p:FIFP

  • 根據檔案時間進行搜尋

    通路時間

    -atime

    :使用者最近一次通路檔案的時間;

    修改時間

    -mtime

    :檔案内容最後一次被修改的時間;

    變化時間

    -ctime

    :檔案中繼資料(如權限或所有者)最後一次被改變的時間

    (以上機關為:天)

    -atime/-mtime/-ctime

    可作為find的時間選項。可以用整數值指定,機關是天。還可以帶-/+:-表示小于,+表示大于
    # 列印出最近7天内被通路過的所有檔案
    [root@vm2 opt]# find . -maxdepth 1 -type f -atime -7
    ./install_mysql.sh
    ./conn.sh
    ./mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz
    ./start.sh
    # 列印出恰好2天前被通路過的所有檔案
    [root@vm2 opt]# find . -maxdepth 1 -type f -atime 2
    ./install_mysql.sh
    ./mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz
    # 列印出通路時間超過7天的所有檔案
    [root@vm2 opt]# find . -maxdepth 1 -type f -atime +7
    ./clear.sh
    ./install.sh
    ./kill-mongo.sh      

    -amin

    -mmin

    -cmin

    (以上機關為:分鐘)
    # 通路時間超過7分鐘的所有檔案
    [root@vm2 find-test]# find . -maxdepth 1 -type f -amin +7 
    ./n.txt
    ./new.txt
    ./new.sh
    ./new.py
    ./new.PY
    ./new.SH      
    參數

    -newer

    ,指定一個用于比較時間戳的參考檔案,然後找到比參考檔案更新(更近的修改時間)的所有檔案
    [root@vm2 opt]# find . -maxdepth 1 -type f -newer conn.sh 
    ./install_mysql.sh
    [root@vm2 opt]# stat conn.sh 
    File: `conn.sh'
    Size: 71            Blocks: 8          IO Block: 4096   regular file
    Device: 802h/2050d    Inode: 1053057     Links: 1
    Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2016-05-27 17:57:16.852377034 +0800
    Modify: 2016-04-29 05:45:25.880432420 +0800
    Change: 2016-04-29 05:45:25.884432437 +0800  
    [root@vm2 opt]# stat install_mysql.sh 
    File: `install_mysql.sh'
    Size: 3265          Blocks: 8          IO Block: 4096   regular file
    Device: 802h/2050d    Inode: 1053056     Links: 1
    Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2016-05-25 17:09:46.046655516 +0800
    Modify: 2016-05-25 17:09:40.577657518 +0800
    Change: 2016-05-25 17:09:40.587656924 +0800      
  • 基于檔案大小的搜尋
    # 大于2KB的檔案
    [root@vm2 opt]# find . -maxdepth 1 -type f -size +2k
    ./install_mysql.sh
    ./mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz
    # 小于2KB的檔案
    [root@vm2 opt]# find . -maxdepth 1 -type f -size -2k
    ./clear.sh
    ./conn.sh
    ./install.sh
    ./kill-mongo.sh
    ./start.sh      

    b:塊(512位元組)

    c:位元組

    w:字(2位元組)

    k:1024位元組

    M:1024K位元組

    G:1024M位元組

  • 删除比對的檔案

    -delete

    ,删除find比對到的檔案
    [root@vm2 find-test]# ls
    n  new.py  new.PY  new.sh  new.SH  new.txt  n.txt
    [root@vm2 find-test]# find . -maxdepth 1 -name new.sh
    ./new.sh
    [root@vm2 find-test]# find . -maxdepth 1 -type f -name  new.sh -delete
    [root@vm2 find-test]# find . -maxdepth 1 -name new.sh      
  • 基于檔案權限和所有權限比對

    -perm

    ,指定find比對的權限
    # 找出權限為700的檔案
    [root@vm2 find-test]# find . -maxdepth 1 -type f -perm 700
    ./n.txt
    # 找出權限為644的檔案
    [root@vm2 find-test]# find . -maxdepth 1 -type f -perm 644
    ./new.txt
    ./new.py
    ./new.PY
    ./new.SH
    # 找出權限不是644的檔案
    [root@vm2 find-test]# find . -maxdepth 1 -type f ! -perm 644
    ./n.txt      
  • [root@vm2 find-test]# find . -maxdepth 1 -type f -user mysql 
    ./new.txt
    [root@vm2 find-test]# find . -maxdepth 1 -type f -user mysql -exec chown zabbix. {} \;
    # find指令找到檔案new.txt的所有者為mysql,那麼find會執行:chown zabbix. {},然後被解析為:chown zabbix. new.txt
    [root@vm2 find-test]# ll new.txt 
    -rw-r--r-- 1 zabbix zabbix 0 May 27 17:14 new.txt      
上一篇: find指令
下一篇: find指令

繼續閱讀