find命令學習

一、功能說明

    find命令用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視爲欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。

二、語法格式

  find (選項) (參數)

  圖示:

   wKioL1bsInOzjv02AADS2ebEdHw069.png

                       

三、常用選項  

  -o:或者,一般用在多個參數之間。

  -a:並且,一般用在多個參數之間。

  -user<擁有者名稱>:查找符和指定的擁有者名稱的文件或目錄;

-gid<羣組識別碼>:查找符合指定之羣組識別碼的文件或目錄;

  -amin<分鐘>:查找在指定時間曾被存取過的文件或目錄,單位以分鐘計算(-1010分鐘以內,+1010分鐘以前);

-anewer<參考文件或目錄>:查找其存取時間較指定文件或目錄的存取時間更接近現在的文件或目錄;

-atime<24小時數>:查找在指定時間曾被存取過的文件或目錄,單位以24小時計算(-1010天以內,+1010天以前);

-cmin<分鐘>:查找在指定時間之時被更改過的文件或目錄;

-cnewer<參考文件或目錄>:查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄;

-ctime<24小時數>:查找在指定時間之時被更改的文件或目錄,單位以24小時計算;

-depth:從指定目錄下最深層的子目錄開始查找;

-empty:尋找文件大小爲0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄;

-exec<執行指令>:假設find指令的回傳值爲True,就執行該指令(類似於find|xargs);

-false:將find指令的回傳值皆設爲False

-follow:排除符號連接;

-fstype<文件系統類型>:只尋找該文件系統類型下的文件或目錄;

-ilname<範本樣式>:此參數的效果和指定“-lname”參數類似,但忽略字符大小寫的差別;

-iname<範本樣式>:此參數的效果和指定“-name”參數類似,但忽略字符大小寫的差別;

-inum:查找符合指定的inode編號的文件或目錄;

-ipath<範本樣式>:此參數的效果和指定“-path”參數類似,但忽略字符大小寫的差別;

-links<連接數目>:查找符合指定的硬連接數目的文件或目錄;

-iname<範本樣式>:指定字符串作爲尋找符號連接的範本樣式;

-ls:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出;

-maxdepth<目錄層級>:設置最大目錄層級;

-mindepth<目錄層級>:設置最小目錄層級;

-mmin<分鐘>:查找在指定時間曾被更改過的文件或目錄,單位以分鐘計算;

-mount:此參數的效果和指定“-xdev”相同;

-mtime<24小時數>:查找在指定時間曾被更改過的文件或目錄,單位以24小時計算;

-name<範本樣式>:指定字符串作爲尋找文件或目錄的範本樣式;

-newer<參考文件或目錄>:查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄;

-nogroup:找出不屬於本地主機羣組識別碼的文件或目錄;

-noleaf:不去考慮目錄至少需擁有兩個硬連接存在;

-nouser:找出不屬於本地主機用戶識別碼的文件或目錄;

-ok<執行指令>:此參數的效果和指定“-exec”類似,但在執行指令之前會先詢問用戶,若回答“y”或“Y”,則放棄執行命令;

-path<範本樣式>:指定字符串作爲尋找目錄的範本樣式;

-perm<權限數值>:查找符合指定的權限數值的文件或目錄;

-fprint<列表文件>:此參數的效果和指定“-print”參數類似,但會把結果保存成指定的列表文件;

-fprint0<列表文件>:此參數的效果和指定“-print0”參數類似,但會把結果保存成指定的列表文件;

-fprintf<列表文件><輸出格式>:此參數的效果和指定“-printf”參數類似,但會把結果保存成指定的列表文件;

-print:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出。格式爲每列一個名稱,每個名稱前皆有“./”字符串;

-print0:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出。格式爲全部的名稱皆在同一行;

-printf<輸出格式>:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出。格式可以自行指定;

-prune:不尋找字符串作爲尋找文件或目錄的範本樣式;

-regex<範本樣式>:指定字符串作爲尋找文件或目錄的範本樣式(正則表達式);

-iregex<範本樣式>:此參數的效果和指定“-regexe”參數類似,但忽略字符大小寫的差別;

-size<文件大小>:查找符合指定的文件大小的文件;

-true:將find指令的回傳值皆設爲True

-type<文件類型>:只尋找符合指定的文件類型的文件;

-uid<用戶識別碼>:查找符合指定的用戶識別碼的文件或目錄;

-used<日數>:查找文件或目錄被更改之後在指定時間曾被存取過的文件或目錄,單位以日計算;

-user<擁有者名稱>:查找符和指定的擁有者名稱的文件或目錄;

-xdev:將範圍侷限在先行的文件系統中;

-xtype<文件類型>:此參數的效果和指定“-type”參數類似,差別在於它針對符號連接檢查

四、參數

       起始目錄:查找文件的起始目錄,也可以指定絕對路徑或相對路徑

五、實例

       模糊搜索,忽略大小寫
[root@lixin tmp]# find . -name '*.txt'
./1.txt
[root@lixin tmp]# find . -iname '*.txt'
./1.txt
./1.TXT
[root@lixin tmp]#
      
       搜索名字是.txt或者是.rar的文件
[root@lixin tmp]# find . -name "*.txt" -o -name"*.rar"
./1.txt
./2.rar
      
       搜索絕對路徑中包含關鍵字的文件
[root@lixin /]# find /tmp -path "*lixin*"
/tmp/lixin
/tmp/lixin/1.txt
/tmp/lixin/3.rar
/tmp/lixin/5.txt
/tmp/lixin/3.txt
      
       找出/tmp下不是txt結尾的文件
[root@lixin /]# find /tmp ! -name "*.txt" -type f
/tmp/lixin/3.rar
/tmp/lixin/4.rar
/tmp/lixin/5.rar
/tmp/lixin/2.rar
/tmp/lixin/1.rar
/tmp/2.rar
/tmp/2.RAR
/tmp/1.TXT
[root@lixin /]#
      
       找出456修改時間到當前時間修內改過的文件
[root@lixin ~]# find . -newer 456
.
./.lesshst
./1.txt
./3
./2
./12.txt
./1
./ls
./!
./123
./.bash_history
[root@lixin ~]#
      
       兩種方法查找以txt結尾的文件,並改名爲txt.bak(-exec 和-ok的功能相同)
[root@lixin tmp]# find . -name "*.txt" -exec mv {} .bak \;
[root@lixin tmp]# cd lixin/
[root@lixin lixin]# ls
1.rar      2.rar      3.rar     4.rar      5.rar
1.txt.bak  2.txt.bak  3.txt.bak 4.txt.bak  5.txt.bak
[root@lixin lixin]#
[root@lixin lixin]# find . -name "*.rar" | xargs -i mv {} {}.bak
[root@lixin lixin]# ls
1.rar.bak  2.rar.bak  3.rar.bak 4.rar.bak  5.rar.bak
1.txt.bak  2.txt.bak  3.txt.bak 4.txt.bak  5.txt.bak
[root@lixin lixin]#
      
       找出空文件
[root@lixin new]# find . -empty
./2.txt.bak
./1.txt.bak
./5.rar.bak
      
查找出當前目錄下的所有一級子目錄
[root@lixin tmp]# find . -maxdepth 1 -type d ! -name "." 
./4
./.ICE-unix
./3
./2
./1
./stu
[root@lixin tmp]#
       //通過-maxdepth參數設定搜索深度爲1,排除./..這種特殊目錄。
 
       查找/tmp目錄下7天以前的文件並且文件後綴是log,並刪除
方法一:
[root@lixin tmp]# find /tmp -mtime +7 -name "*.log" -exec rm -rf{} \;
    //通過調用內置的-exec參數直接執行刪除操作,或者使用-ok,區別是刪除的時候會提示。
方法二:
[root@lixin tmp]# find /tmp -mtime +7 -name "*.log" | xargs rm–rf
    //通過管道符由xargs,轉換後交給rm。
方法三:
[root@lixin tmp]# rm –rf `find /tmp -mtime +7 -name "*.log"`
    //反引號的使用,是rm直接刪除find的結果。


 

六、擴展學習

     -type的參數有:f表示文件,d表示目錄,b表示塊設備,c表示字符設備,l表示鏈接文件,s表示sock文件(安全套接字)。

     -size的參數有:K表示kbM表示MbG表示Gb

    在參數前加!,表示取反。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章