Linux環境下的find命令簡明教程

2021-08-20 10:39:39 字數 2813 閱讀 4883

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動作命令

-print    

預設動作,將搜尋結果寫入到標準輸出

-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的所有目...