標籤:shell編程 find命令 嵌入式
find命令的完整文法格式如下所示:
find [path] [options] [tests] [actions]
- path
path部分很容易理解:既可以使用絕對路徑,如/bin,也可以使用相對路徑,如 . 。如果需要,也可以指定多個路徑,如 find /var /home。
- options
find命令有許多選項可用,下表列出幾個最常用的選項。
選項 |
含義 |
-depth |
在查看目錄本身之前先搜尋目錄的內容 |
-follow |
跟隨符號連結 |
-maxdepths N |
最多搜尋N層目錄 |
-mount(或者-xdev) |
不搜尋其他檔案系統的中的目錄(比如裝的是windows和linux雙系統,採用這個選項即可略過對windows系統下磁碟的尋找) |
- tests
測試部分,可以提供給find命令的測試非常多,每種測試返回的結果有兩種可能:true 或 false。find 命令開始工作時,它按照順序將定義的每種測試一次應用到它搜尋到的每個檔案上。如果一個測試返回 false,find 命令就停止處理它當前找到的這個檔案,並繼續搜尋。如果一個測試返回 true,find 命令將繼續下一個測試或對它當前檔案採取行動(actions)。下表列出了常用的測試。
測試 |
含義 |
-atime N |
檔案在N天之前被最後訪問過 |
-mtime N |
檔案在N天之後最後被修改過 |
-name pattern |
檔案名稱(不包括路徑名)匹配提供的模式pattern,為了確保pattern被傳遞給 find 命令而不是由shell來處理,pattern必須總是用雙引號括起 |
-newer otherfile |
檔案比otherfile檔案要新 |
-type c |
檔案的類型為c,c是一個特殊類型。最常見的是d(目錄)和f(普通檔案)。其他可用的類型可參考手冊頁。 |
-user username |
檔案的擁有者是指定的使用者username |
在shell指令碼編程中,還可以用操作符來組合測試。大多數操作符有兩種格式:短格式和長格式。見下表:
操作符,短格式 |
操作符,長格式 |
含義 |
! |
-not |
測試取反 |
-a |
-and |
兩個測試都必須為真 |
-o |
-or |
兩個測試有一個必須為真 |
也可以通過使用圓括弧來強制測試和操作符的優先順序。由於圓括弧對shell來說有其特殊的含義,所以還必須使用反斜線來引用圓括弧。此外,如果在檔案名稱處使用的匹配模式,就必須在模式上使用引號以確保模式沒有被shell擴充,而是直接傳遞給find命令。例如,如果想寫一個測試“搜尋的檔案比檔案X要新,或者檔案名稱以底線開頭”,可以這樣寫:
\(-newer X -o -name "_*" \)
- actions
現在可以可靠地搜尋檔案了。下面看看在發現匹配指定條件的檔案之後,可以執行的動作。下表給出了幾個常見的動作。
動作 |
含義 |
-exec command |
執行一條命令,這是最常見的動作之一。這個動作必須使用 \; (斜杠分號)字元對來結束。 |
-ok command |
與-exec類似,但它在執行命令之前會針對每個要處理的檔案,提示使用者進行確認。這個動作必須使用 \; 字元對來結束。 |
-print |
列印檔案名 |
-ls |
對當前檔案使用命令 ls-dils |
-exec和-ok命令將命令列上後續的參數作為它們參數的一部分,知道被\;序列終止。實際上,-exec和-ok命令執行的是一個嵌入式命令,所以嵌入式命令必須以一個轉義的分號結束,使得find命令可以決定什麼時候它可以繼續尋找用於它自己的命令列選項。
shell編程中的find命令