find使用詳解

文件查找是根據文件的各種屬性去找到相對應的文件。

文件查找分為實時查找和非實時查找。

    非實時查找是根據索引來進行查找;雖然非實時查找查詢速度快,但在構建索引時相當占用資源,只有在系統空閑時才能進行,這樣有可能會造成索引內容與當前系統中文件的狀態不一致的情況,所以查找結果有可能會不準確。

    locate屬于非實時查找命令,此命令進行模糊查找,所以查找結果并不一定與期望結果一致,如下圖:

        find使用詳解

            查詢文件名為man5的文件,結果包括重復的目錄名man5。

        可以使用update命令來手動更新索引內容。

    實時查找要遍歷所有文件進行條件匹配,所以速度會比較慢,但查找結果精確。

        find命令為實時查找命令,下面主要來介紹find的用法。

find使用方法:

    find命令會遍歷指定目錄中的所有文件來完成查找。

    格式:

        find [option]…[查找路徑][查找條件][處理動作]

            查找路徑:默認為當前目錄

            查找條件:默認為指定路徑下的所有文件

            處理動作:默認為顯示至屏幕

    查找條件:

        –name ‘FILENAME’:文件名作精確匹配,支持使用通配符。

             find使用詳解

            *:任意長度的任意字符

                find使用詳解

            ?:任意單個字符

                find使用詳解

            []:指定范圍內的任意單個字符

                 find使用詳解

            [^]:不包含指定范圍內的任意字符

                find使用詳解

        -iname ‘FILENAME’:文件名匹配時忽略大小寫

            find使用詳解

        -regex pattern:基于正則表達式進行文件名匹配。

            正則表達式要求必須全路徑匹配,如下圖第一個查找只給出了文件名,沒有找到結果;第二個查找給出了完整的查找路徑才顯示出了結果。

                find使用詳解

             如果是多路徑查找可以在路徑處做匹配即可,如下圖:

                find使用詳解

        -iregex:正則表達式匹配的結果中忽略大小寫

                find使用詳解

        -user USERNAME:根據屬主查找

            find使用詳解            

        -group GROUPNAME:根據屬組查找

             find使用詳解        

        -uid UID:根據UID查找

            find使用詳解

        -gid GID:根據GID查找

            find使用詳解

        -nouser:查找沒有屬主的用戶

            find使用詳解

                將rrt用戶刪除后,宿主目錄下的屬于rrt的文件都變成了無屬主文件

        -nogroup:查找沒有屬組的用戶

        -type:根據文件類型查找

            f:普通文件

            d:目錄

            c:字符文件

            b:塊設備    

            s:套接字文件

            p:命名管道

                find使用詳解

        -size [+|-]#UNIT:根據文件大小查找,默認為字節

            常用單位:K,M,G

            因為bash不支持浮點數,所以帶有小數的文件大小會自動進位,如果查找大小為3k的文件,那么大小范圍為2k-3k之間的文件都會顯示出來,而小于3k的文件范圍為小于等于2k.

            #UNIT:#-1 < x <=#

            -#UNIT:x<=#-1

            +#UNIT:x>#

            find使用詳解

                上例中查找的結果中文件大小都在9k-10k之間

            find使用詳解

                上例中查找結果都是大于10k的目錄

            find使用詳解

                上例中的結果都是小于9k的文件。

    組合條件

        -a:與

        -o:或

        -not:非

                find使用詳解

                上例中查找/home下屬于用戶rot的目錄

        兩個條件沒有指定邏輯關系時,默認使用“與”

            -not A -a -not B = -not(A -o B)

            -not A -o -not B = -not(A -a B)

                例如: -not \(iname “*r*” -o -user ben \)     表示文件名中不包含r且忽略大小寫,并且屬主不是ben的文件

    根據時間戳查找:

        以“天”為單位:

            -mtime:文件內容修改時間

            -ctime:元數據改變時間

            -atime:訪問時間

                [+|-] #

                    -atime +5:代表最后一次訪問時間大于等于6天前

                    -atime 5:代表最后一次訪問時間在5-6那一天

                    -atime -5:代表最后一次訪問時間小于等于5天內     

                  

            

                    find使用詳解

     例如:當前有四個文件分別為a,b,c,d,最后訪問時間如下所示:

               a   2015-03-17 02:51:37
                  b   2015-03-15 15:00:00
                  c   2015-03-10 15:00:00
                  d   2015-03-13 15:00:00

        假如文件a的時間為當前時間,則其它三個文件的時間與a文件相差的天數分別為:b,2天,c,7天,d,4天

            find使用詳解

            上例中當atime=1時所查找的區間為1-2天之間的文件,結果為文件b;atime=-1時查找1天以的文件,結果為文件a;atime=+1時查找大于2天的文件,結果為文件c和文件d。

            下圖分別查找2天和3天的不同情況,可以結合上面的圖示時間表來進行分析

            find使用詳解

            find使用詳解

        以“分鐘”為單位

            -mmin

            -cmin

            -amin

            用法上面的情況相同,不再詳細說明。

根據權限查找

    -perm [/|+|-] MODE 根據權限查找

        mode:精確匹配

        /mode|+mode:只要有一位匹配即可

        -mode:必須包含整個mode才能顯示

            例如:目前當前目錄中的文件的權限如下圖所示

              find使用詳解

            查找權限為640的文件

                find使用詳解

            查找權限為包含640中任意一位的文件

                find使用詳解

            查找權限中至少包含640的文件

                find使用詳解

    處理動作:

        -print:默認處理動作,顯示

        -ls:類似ls -l的形式顯示每一個文件的詳細信息

        -ok COMMAND {} \;:每一次操作都需要確認

        -exec COMMAND {} \;:執行命令時不需要確認

            find使用詳解

            find使用詳解

            find使用詳解

    find一次查找符合條件的所有文件,并一同傳遞給-ok或-exec后面的命令,但有些命令不能接受過長的參數,此時可以采用下面這種方式來解決:

        find | xargs COMMAND     此方式可以逐行處理數據

            find使用詳解

            

        

原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/1081

(0)
petmasterpetmaster
上一篇 2015-03-18
下一篇 2015-03-19

相關推薦

  • Nginx 編譯安裝

    Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服 1、Apache服務器和nginx的優缺點: Apache具有很優秀的性能,而且通過模塊可以提供各種豐富的功能。 1)首先Apache對客戶端的響應是支持并發的 ,運行httpd這個daemon進程之后,它會同時產生多個子進程/…

    Linux干貨 2017-02-06
  • N22-℡浮生.若夢 ╮第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash ## declare -i log_user declare -i notlog_user for i …

    Linux干貨 2016-12-12
  • CentOS開發環境搭建

        一個月之前將系統換為Linux,昨天系統運行的時候突然死機,開機之后進不了系統,并且BIOS無法識別硬盤,無奈只有在普通硬盤上重裝系統。搭建開發環境,為了避免再次遇到類似現象,或在下次遇到這類問題快速搭建開發環境,記錄開發環境搭建的過程。 1、啟用wifi echo "blacklist&n…

    Linux干貨 2016-08-04
  • TCP詳解

    TCP協議詳解   TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個使用TCP/IP協議的協議集合。他取代了OSI七層模型,成為事實上的應用于實際的模型。 TCP/IP協議與OSI協議的關系如下:   各層的作用如下: TCP特性: 工作在傳輸層面向連接協議 全雙工協議 半關閉 錯誤檢查 將數據打包成段,排序 確認機制 …

    2017-09-02
  • 文本處理工具sed的使用以及Vim的使用技巧詳解

    一、什么是sed     sed的英文全稱是Stream EDitor,叫行編輯器。     sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容…

    Linux干貨 2016-08-11
  • linux防火墻介紹

    一、前言firewall(防火墻):工作在網絡進入或者流包,進出的網絡數據包進行一定的規則進行檢查過濾系統。包括iptables和netfilter組件。iptables 是與 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統系統中更好地控制 IP 信息包過濾和…

    2017-04-30

評論列表(3條)

  • stanley
    stanley 2015-03-18 18:53

    文章代碼多使用編輯器會使文章整體更專業美關,另: 請標簽的添加會使文章的SEO成功率大大提高,

    • petmaster
      petmaster 2015-03-19 11:28

      @stanley好的,謝謝!
      以后會注意優化

  • Linux_love
    Linux_love 2015-03-28 17:46

    mark

欧美性久久久久