linux find 命令查找文件和文件夾

查找目錄:find /(查找範圍) -name '查找關鍵字' -type d
查找文件:find /(查找範圍) -name 查找關鍵字 -printphp

 

 

詳解:node

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

語法

find(選項)(參數)

選項

-amin<分鐘>:查找在指定時間曾被存取過的文件或目錄,單位以分鐘計算;
-anewer<參考文件或目錄>:查找其存取時間較指定文件或目錄的存取時間更接近如今的文件或目錄;
-atime<24小時數>:查找在指定時間曾被存取過的文件或目錄,單位以24小時計算;
-cmin<分鐘>:查找在指定時間之時被更改過的文件或目錄;
-cnewer<參考文件或目錄>查找其更改時間較指定文件或目錄的更改時間更接近如今的文件或目錄;
-ctime<24小時數>:查找在指定時間之時被更改的文件或目錄,單位以24小時計算;
-daystart:從本日開始計算時間;
-depth:從指定目錄下最深層的子目錄開始查找;
-expty:尋找文件大小爲0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄;
-exec<執行指令>:假設find指令的回傳值爲True,就執行該指令;
-false:將find指令的回傳值皆設爲False;
-fls<列表文件>:此參數的效果和指定「-ls」參數相似,但會把結果保存爲指定的列表文件; -follow:排除符號鏈接; -fprint<列表文件>:此參數的效果和指定「-print」參數相似,但會把結果保存成指定的列表文件; -fprint0<列表文件>:此參數的效果和指定「-print0」參數相似,但會把結果保存成指定的列表文件; -fprintf<列表文件><輸出格式>:此參數的效果和指定「-printf」參數相似,但會把結果保存成指定的列表文件; -fstype<文件系統類型>:只尋找該文件系統類型下的文件或目錄; -gid<羣組識別碼>:查找符合指定之羣組識別碼的文件或目錄; -group<羣組名稱>:查找符合指定之羣組名稱的文件或目錄; -help或——help:在線幫助; -ilname<範本樣式>:此參數的效果和指定「-lname」參數相似,但忽略字符大小寫的差異; -iname<範本樣式>:此參數的效果和指定「-name」參數相似,但忽略字符大小寫的差異; -inum<inode編號>:查找符合指定的inode編號的文件或目錄; -ipath<範本樣式>:此參數的效果和指定「-path」參數相似,但忽略字符大小寫的差異; -iregex<範本樣式>:此參數的效果和指定「-regexe」參數相似,但忽略字符大小寫的差異; -links<鏈接數目>:查找符合指定的硬鏈接數目的文件或目錄; -iname<範本樣式>:指定字符串做爲尋找符號鏈接的範本樣式; -ls:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出; -maxdepth<目錄層級>:設置最大目錄層級; -mindepth<目錄層級>:設置最小目錄層級; -mmin<分鐘>:查找在指定時間曾被更改過的文件或目錄,單位以分鐘計算; -mount:此參數的效果和指定「-xdev」相同; -mtime<24小時數>:查找在指定時間曾被更改過的文件或目錄,單位以24小時計算; -name<範本樣式>:指定字符串做爲尋找文件或目錄的範本樣式; -newer<參考文件或目錄>:查找其更改時間較指定文件或目錄的更改時間更接近如今的文件或目錄; -nogroup:找出不屬於本地主機羣組識別碼的文件或目錄; -noleaf:不去考慮目錄至少需擁有兩個硬鏈接存在; -nouser:找出不屬於本地主機用戶識別碼的文件或目錄; -ok<執行指令>:此參數的效果和指定「-exec」相似,但在執行指令以前會先詢問用戶,若回答「y」或「Y」,則放棄執行命令; -path<範本樣式>:指定字符串做爲尋找目錄的範本樣式; -perm<權限數值>:查找符合指定的權限數值的文件或目錄; -print:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出。格式爲每列一個名稱,每一個名稱前皆有「./」字符串; -print0:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出。格式爲所有的名稱皆在同一行; -printf<輸出格式>:假設find指令的回傳值爲Ture,就將文件或目錄名稱列出到標準輸出。格式能夠自行指定; -prune:不尋找字符串做爲尋找文件或目錄的範本樣式; -regex<範本樣式>:指定字符串做爲尋找文件或目錄的範本樣式; -size<文件大小>:查找符合指定的文件大小的文件; -true:將find指令的回傳值皆設爲True; -typ<文件類型>:只尋找符合指定的文件類型的文件; -uid<用戶識別碼>:查找符合指定的用戶識別碼的文件或目錄; -used<日數>:查找文件或目錄被更改以後在指定時間曾被存取過的文件或目錄,單位以日計算; -user<擁有者名稱>:查找符和指定的擁有者名稱的文件或目錄; -version或——version:顯示版本信息; -xdev:將範圍侷限在先行的文件系統中; -xtype<文件類型>:此參數的效果和指定「-type」參數相似,差異在於它針對符號鏈接檢查。

參數

起始目錄:查找文件的起始目錄。正則表達式

實例

根據文件或者正則表達式進行匹配

列出當前目錄及子目錄下全部文件和文件夾ui

find .

/home目錄下查找以.txt結尾的文件名spa

find /home -name "*.txt"

同上,但忽略大小寫.net

find /home -iname "*.txt"

當前目錄及子目錄下查找全部以.txt和.pdf結尾的文件code

find . \( -name "*.txt" -o -name "*.pdf" \)

或

find . -name "*.txt" -o -name "*.pdf" 

匹配文件路徑或者文件ip

find /usr/ -path "*local*"

基於正則表達式匹配文件路徑字符串

find . -regex ".*\(\.txt\|\.pdf\)$"

同上,但忽略大小寫

find . -iregex ".*\(\.txt\|\.pdf\)$"

否認參數

找出/home下不是以.txt結尾的文件

find /home ! -name "*.txt"

根據文件類型進行搜索

find . -type 類型參數

類型參數列表:

  • 普通文件
  • 符號鏈接
  • d 目錄
  • 字符設備
  • 塊設備
  • 套接字
  • Fifo

基於目錄深度搜索

向下最大深度限制爲3

find . -maxdepth 3 -type f

搜索出深度距離當前目錄至少2個子目錄的全部文件

find . -mindepth 2 -type f

根據文件時間戳進行搜索

find . -type f 時間戳

UNIX/Linux文件系統每一個文件都有三種時間戳:

  • 訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。
  • 修改時間(-mtime/天,-mmin/分鐘):文件最後一次修改時間。
  • 變化時間(-ctime/天,-cmin/分鐘):文件數據元(例如權限等)最後一次修改時間。

搜索最近七天內被訪問過的全部文件

find . -type f -atime -7

搜索剛好在七天前被訪問過的全部文件

find . -type f -atime 7

搜索超過七天內被訪問過的全部文件

find . -type f -atime +7

搜索訪問時間超過10分鐘的全部文件

find . -type f -amin +10

找出比file.log修改時間更長的全部文件

find . -type f -newer file.log

根據文件大小進行匹配

find . -type f -size 文件大小單元

文件大小單元:

  • b —— 塊(512字節)
  • c —— 字節
  • w —— 字(2字節)
  • k —— 千字節
  • M —— 兆字節
  • G —— 吉字節

搜索大於10KB的文件

find . -type f -size +10k

搜索小於10KB的文件

find . -type f -size -10k

搜索等於10KB的文件

find . -type f -size 10k

刪除匹配文件

刪除當前目錄下全部.txt文件

find . -type f -name "*.txt" -delete

根據文件權限/全部權進行匹配

當前目錄下搜索出權限爲777的文件

find . -type f -perm 777

找出當前目錄下權限不是644的php文件

find . -type f -name "*.php" ! -perm 644

找出當前目錄用戶tom擁有的全部文件

find . -type f -user tom

找出當前目錄用戶組sunk擁有的全部文件

find . -type f -group sunk

藉助-exec選項與其餘命令結合使用

找出當前目錄下全部root的文件,並把全部權更改成用戶tom

find .-type f -user root -exec chown tom {} \;

上例中,{} 用於與-exec選項結合使用來匹配全部文件,而後會被替換爲相應的文件名。

找出本身家目錄下全部的.txt文件並刪除

find $HOME/. -name "*.txt" -ok rm {} \;

上例中,-ok-exec行爲同樣,不過它會給出提示,是否執行相應的操做。

查找當前目錄下全部.txt文件並把他們拼接起來寫入到all.txt文件中

find . -type f -name "*.txt" -exec cat {} \;> all.txt

將30天前的.log文件移動到old目錄中

find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

找出當前目錄下全部.txt文件並以「File:文件名」的形式打印出來

find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

由於單行命令中-exec參數中沒法使用多個命令,如下方法能夠實如今-exec以後接受多條命令

-exec ./text.sh {} \;

搜索但跳出指定的目錄

查找當前目錄或者子目錄下全部.txt文件,可是跳過子目錄sk

find . -path "./sk" -prune -o -name "*.txt" -print

find其餘技巧收集

要列出全部長度爲零的文件

find . -empty
相關文章
相關標籤/搜索