1. 程式人生 > >IC數字前端設計開發16 ([linux命令] find)

IC數字前端設計開發16 ([linux命令] find)

  • Linux find命令是所有Linux命令中最有用的一個,它允許按名稱、型別、使用者、許可權、時間等實時查詢檔案,還能對查詢到的檔案執行檢視、刪除、移動等操作。

    一、find官方手冊

    使用man find檢視linux find命令的使用方法如下:

    NAME find -- walk a file hierarchySYNOPSIS find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]...

    查詢當前目錄及子目錄下素有檔案和資料夾

    find .

    二、按檔名查詢

    引數 描述
    -name 按檔名查詢
    -iname 按檔名查詢(不區分大小寫)
    -regex 按正則條件查詢

    使用範例如下:

    find . -name '*.jpg' -print #按名稱查詢當前資料夾下的.jpg檔案find . -regex '.*/.jpg' #按正則查詢當前資料夾下的.jpg檔案

    注: 
    -print:假設find指令的回傳值為true,就將檔案或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有“./”字串; 
    -print0:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行;

    三、按檔案從屬關係查詢

    find . -user 'Jerry' -print #查詢當前目錄及子目錄下所有使用者名稱為Jerry的檔案

    其他從屬關係

    從屬符號 描述
    -user 按使用者名稱查詢
    -group 按分組組名查詢
    -nouser 查詢沒有屬主的檔案
    -nogroup 查詢沒有屬組的檔案

    四、按檔案型別查詢

    find . -type f -print #查詢當前目錄及子目錄下所有的普通檔案find . -type d -print #查詢當前目錄及子目錄下所有的目錄

    所有可查詢的型別如下:

    型別 功能
    f 普通檔案
    d 資料夾
    b 塊裝置檔案
    c 字元裝置檔案
    l 連線檔案
    s 套接字檔案
    p 管道檔案

    五、按檔案大小查詢

    find . -size 1M -print #精確查詢當前目錄及子目錄下大小為1M的檔案/資料夾find . -size -1M -print #查詢當前目錄及子目錄下小於1M的檔案/資料夾find . -size +1M -print #查詢當前目錄及子目錄下大於1M的檔案/資料夾

    檔案大小單位:

    單位符號 描述
    b 塊(512位元組)
    c 位元組
    w 字(2位元組)
    k 千位元組
    M 兆位元組
    G 吉位元組

    六、按時間查詢

    find . -mtime 1 -print #精確查詢當前目錄及子目錄下前一天修改的檔案find . -mtime +1 -print #精確查詢當前目錄及子目錄下一天前修改的檔案find . -mtime -1 -print #精確查詢當前目錄及子目錄下一天內修改的檔案

    時間選項如下:

    時間型別 描述
    -atime 以檔案/資料夾訪問時間(天)查詢
    -mtime 以檔案/資料夾修改時間(天)查詢
    -ctime 以檔案/資料夾資料元(如許可權等)修改時間(天)查詢
    -atime 以檔案/資料夾訪問時間(分鐘)查詢
    -mtime 以檔案/資料夾修改時間(分鐘)查詢
    -ctime 以檔案/資料夾資料元(如許可權等)修改時間(分鐘)查詢
    -newer file 以file檔案為條件,查詢比其新的檔案/資料夾
    -not -newer file 以file檔案為條件,查詢比其老的檔案/資料夾

    七、按許可權查詢

    find . -perm 644 -print #精確查詢當前目錄及子目錄下ugo許可權為644的檔案/資料夾find . -perm +111 -print #精確查詢當前目錄及子目錄下ugo使用者中任意一類(或)有可執行許可權的檔案/資料夾find . -perm -111 -print #精確查詢當前目錄及子目錄下ugo使用者都擁有(與)可執行許可權的檔案/資料夾

    注:檔案有owner(user)、group、others三種身份,分別用u、g、o表示,用a同時代表三種身份,用r、w、x代表讀、寫、執行三種許可權,每種身份的許可權按rwx順序用一個8進位制數表示,如777表示同時擁有讀、寫和可執行許可權。

    八、組合條件查詢

    find . -name '*.gif' -a -perm 644 #查詢當前目錄及子目錄下格式為gif且許可權為644的檔案/資料夾find . -name '*.gif' -o -name '*.jpg' #查詢當前目錄及子目錄下格式為gif或jpg的檔案/資料夾find . -not -name '*.gif' #查詢當前目錄及子目錄下格式不為gif的檔案/資料夾find . -name '*.jpg' -o /( -name '*.txt' -a -empty /) #帶括號的複雜查詢, 查詢jpg檔案或空txt檔案

    組合符號

    組合符號 描述
    -a 與,預設組合條件
    -o
    -not (!)

    九、查詢結果處理

    find . -name '*.txt' -exec grep 'test' {} /; #查詢當前目錄及子目錄下txt檔案並查詢檔案中包含test的行

    查詢結果處理動作:

    處理操作 描述
    -print 輸出到標準輸出,預設操作
    -ls 以ls長檔案形式輸出到標準輸出,預設操作
    -delete 刪除查詢到的檔案/資料夾
    -fls /path/filename 以ls長檔案形式儲存到file中
    -ok COMMAND {} /; 將查詢到的檔案傳遞給COMMAND命令,有提示
    -exec COMMAND {} /; 將查詢到的檔案傳遞給COMMAND命令,無提示

    十、其他查詢

    find . -empty -print #查詢當前目錄及子目錄下的空檔案/資料夾find . -empty -maxdepth 2 #查詢當前目錄及子目錄下的空檔案/資料夾, 且查詢目錄層級至多2級find . -empty -mindepth 1 #查詢當前目錄及子目錄下的空檔案/資料夾, 且查詢目錄層級至少1級