可以使用 find 命令在整個(gè)目錄及其子目錄下搜索符合特定準(zhǔn)則的文件。然后,可以在找到的文件中執(zhí)行命令。
|
查找符合某種模式的文件 |
 |
雖然 find 的語(yǔ)法較為復(fù)雜,但它有助于提高使用 HP-UX 的效率。此命令功能強(qiáng)大而且靈活。但是運(yùn)行速度較慢,搜索多個(gè)目錄時(shí)尤其如此。
假定要顯示當(dāng)前目錄及其子目錄下所有以 d 開(kāi)頭的文件,請(qǐng)輸入:
find(1)
命令中的點(diǎn) (.) 會(huì)使 find 搜索當(dāng)前目錄及其子目錄。文件名后的 -name 選項(xiàng)或文件名模式(在這種情況下為 d*)告知 find 搜索所有符合該模式的文件。在本示例中,find 將搜索所有以 d 開(kāi)頭的文件名。
注意,d* 要用單引號(hào)括起來(lái) ('d*')。如果在 find 命令中使用文件名模式,必須用單引號(hào)將其括起來(lái),以便 shell 可以對(duì)其進(jìn)行正確地解釋。
|
查找晚于某個(gè)文件創(chuàng)建日期的文件 |
 |
假定您想顯示所有在某個(gè)文件創(chuàng)建日期之后修改過(guò)的文件。要顯示 /home/leslie 目錄及其子目錄下所有晚于 myfile 創(chuàng)建日期的文件,請(qǐng)輸入:
$ find /home/leslie -newer myfile
|
本示例可以理解為:在目錄 /home/leslie 及其子目錄下,查找所有在 myfile 創(chuàng)建日期之后修改過(guò)的文件。(要確定文件的上次修改日期,請(qǐng)使用 ll 命令。)
|
在文件中運(yùn)行命令 |
 |
可以在使用 find 命令查找到的文件中執(zhí)行命令。假定您想刪除當(dāng)前目錄及其子目錄下所有擴(kuò)展名為 .tmp 的文件。請(qǐng)輸入:
$ find . -name '*.tmp' -exec rm {} \;
|
本示例查找當(dāng)前目錄及其子目錄下所有擴(kuò)展名為 .tmp 的文件,并將其顯示在屏幕上,然后將其刪除。-exec 選項(xiàng)會(huì)導(dǎo)致以下命令 (rm) 的執(zhí)行。花括號(hào) {} 代表使用 find 命令找到的文件。結(jié)束 exec 字符串的分號(hào)之前應(yīng)添加一個(gè)反斜線 (\;)。
|
使用邏輯運(yùn)算符 |
 |
find 的語(yǔ)法中包括邏輯布爾運(yùn)算符:NOT、AND 和 OR。
要查找不符合特定模式的文件,請(qǐng)使用 NOT 邏輯運(yùn)算符,即感嘆號(hào) (!)。使用此運(yùn)算符之后,必須使用選項(xiàng)定義文件屬性,如文件名。然后,將找到不具有指定屬性的文件。
例如,要查找 /tmp 下所有不屬于 leslie 的文件,請(qǐng)使用以下命令:
$ find /tmp \( ! -user leslie \)
|
\ 避免了 shell 將圓括號(hào)視為特殊字符的可能性。
要查找具有兩個(gè)不同屬性的文件,請(qǐng)使用 AND 邏輯運(yùn)算符(表達(dá)式 -a 表達(dá)式)。例如,要查找 / 下所有屬于 leslie 的目錄,請(qǐng)使用以下命令:
$ find / \( -type d -a -user leslie \)
|
要查找具有其中一個(gè)或兩個(gè)屬性的文件,請(qǐng)使用 OR 邏輯運(yùn)算符(表達(dá)式 -o 表達(dá)式)。例如,要?jiǎng)h除一周以來(lái)從未訪問(wèn)過(guò)的以 .o 結(jié)尾或名為 a.out 的所有文件,請(qǐng)使用以下命令:
$find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
|