find命令是unix系統中最為古老與複雜的命令之一,它功能強大,可以根據不同的標準在任何位置搜尋任何檔案。
find命令的基本思想即搜尋乙個或者多個目錄樹,根據使用者指定的測試條件,查詢符合特定標準的檔案。當查詢完成之後,find命令將對查詢到的檔案執行指定的操作。這些操作可簡可繁,簡單的例如僅輸出檔名;複雜的例如刪除檔案、將搜尋結果傳遞給另乙個命令。在使用find命令時,使用者需要提供3類資訊,分別為目標路徑、測試條件以及操作。find命令的基本如下所示:
find path test action
其中,path引數表示目標路徑,使用者可以同時指定多個路徑,路徑之間用空格隔開。test引數表示測試條件;同樣,使用者可同時指定多個測試條件,它們之間用空格隔開;action引數則表示對於搜尋結果要執行的操作,如果有多個操作,則它們之間同樣使用空格隔開。
find命令的工作流程如下所示:
(1)搜尋所有使用者指定的路徑,包括所有的子目錄
(2)對於遇到的每個檔案,檢查是否符合使用者指定的條件。在該步驟中,所有符合條件的檔案形成乙個列表。
(3)對於結果列表中的每個檔案,執行使用者指定的操作。
如下為乙個find命令的簡單應用例項
find / -name ls -print
在該應用例項中,目標路徑為根目錄,表示在當前系統的所有的目錄及其子目錄中進行搜尋。測試條件為-name ls,表示搜尋檔名為ls的檔案。操作為-print,表示將搜尋到的檔名列印出來。
find命令的路徑引數表示在何處搜尋指定的檔案。通常情況下,路徑都是乙個目錄名,使用者可以使用相對路徑、絕對路徑,以及簡寫形式來指定路徑,如下所示。
find /usr/bin
find /
find .
find -root
以乙個示例指令碼為例。該指令碼檔案的作用是在當前路徑下搜尋擴充套件名為.sh的檔案並輸出結果。
#! /bin/bash
files=`find . -name ".sh"`
echo "$files"
find命令的測試條件用於對搜尋結果進行篩選,只有符合篩選條件的檔案才會出現在最終的搜尋結果中。下表為部分常用的測試條件。
條件說明
-name pattern
表示包含指定匹配模式的檔名
-iname pattern
表示包含指定匹配模式的檔名,該條件不區分字母大小寫
-type
指定檔案型別,可以取f和d兩個值,分別表示普通檔案和目錄
-perm mode
匹配其許可權被設定為指定mode的檔案
-user userid
匹配其所有者為指定使用者id的檔案
-group groupid
匹配其所有者的組著為指定組id的檔案
-size size
匹配其大小為size的資料夾
-empty
匹配空檔案
需要注意的是,在-type選項中,除了f和d,還可選擇c表示字元裝置,b表示塊裝置,p表示管道,l表示鏈結。
在find測試條件彙總,-name與-type是最為常用的,使用方法如下所示。
#! /bin/bash
files=`find /etc -type f -print | wc -l`
directories=`find /etc -type d -print | wc -l`
echo "there are $files regular files in /etc directory."
echo "there are $directories directories om /etc directory."
此外,方括號「」是一種非常有用的萬用字元,使用者可將一系列的字元放在方括號中,find命令會匹配方括號中的任意乙個字元,例如:
root@main:~# find /etc -name "rc[1-9].d" -print
/etc/rc3.d
/etc/rc1.d
/etc/rc5.d
/etc/rc2.d
/etc/rc6.d
/etc/rc4.d
find命令提供乙個感嘆號運算子!,用來對測試條件進行取反。!符號可以加在任何測試條件前,表示氣候測試的相反條件。在使用!運算子的時候,需要在!符號的左右各留乙個空格。
常用的find動作命令
預設動作,將搜尋結果寫入到標準輸出
-fprint file
與-print相同,但是將搜尋結果寫入到檔案file
-ls以詳細格式(長格式)顯示搜尋結果
-fls file
同-ls,但是將搜尋結果寫入都檔案file
-delete
將搜尋到的檔案刪除
-exec command {} \;
查詢並執行命令,{}表示搜尋到的檔名
-ok command {} \;
查詢並執行命令,但是需要使用者確認
使用者在使用-delete命令的時候需要注意的是該動作不會給出任何確認提示;-exec使find命令對搜尋結果中的檔案執行指定的shell命令,相應的shell命令的語法為:
`command` {} \;
其中command表示shell命令,花括號{}表示索索結果中的檔名,最後的分號表示命令的結束。需要注意的是最後的分號需要 反斜槓來轉義。此外,分號與花括號之間有乙個空格;-ok與-exec的作用相同,但是在執行每乙個命令之前,都會給出提示讓使用者確定是否執行。 Linux下的find命令
linux下find命令在目錄結構中搜尋檔案,並執行指定的操作。linux下find命令提供了相當多的查詢條件,功能很強大。即使系統中含有網路檔案系統,find命令在該檔案系統中同樣有效。在執行乙個非常消耗資源的find命令時,很多人都傾向於把它放在後台執行,因為遍歷乙個大的檔案系統可能會花費很長的...
Linux下find命令的使用
1 已經知道檔案所在的目錄以及檔名的關鍵字 示例 實現在當前目錄下以及所有子目錄下匹配檔名前幾個字母為 nmsagent 的檔案,並顯示其詳細的資訊。root localhost bin find name nmsagent exec ls l rwxr r 1 root root 1693456 ...
linux下的find命令用法
第一部分 根據檔名查詢 1 在當前目錄查詢名稱為test的所有檔案 find test 2 在主目錄下查詢名稱為test的所有檔案 find home name test 3 在主目錄下查詢test的所有檔案,且不分割槽大小寫 find home iname test 4 查詢名稱為test的所有目...