06.05 Linux系統下的find 命令入門講解(舉例說明)

find 命令入門

find 命令入門 列出當前目錄及子目錄下的所有文件 列出某個目錄及子目錄下的所有文件 根據文件名查找文件 忽略大小寫 反向查找 組合條件查找(與) 組合條件查找(或) 只查找文件或只查找目錄 同時在多個目錄下查找

Linux系統中的 find 命令在查找文件時非常有用。它可以根據不同的條件來查找文件,例如文件名、擁有者、文件大小、修改時間等。這篇文章,介紹一下find 命令的基本用法。

find 命令的初級語法如下:

$ find [path] [option] [expression]

為了講清楚如何使用,咱們舉例說明。

列出當前目錄及子目錄下的所有文件

假設目錄結構如下

Linux系統下的find 命令入門講解(舉例說明)

直接輸入find命令

$ find
.
./d1
./d1/a.c
./d1/b.c
./d2
./d2/1.c
./d2/2.c
./d3

列出某個目錄及子目錄下的所有文件

下面的命令表示查找當前目錄下 d1 文件夾中的文件,默認列出所有文件。

$ find d1
d1
d1/a.c
d1/b.c

根據文件名查找文件

我猜這個是用的最多的。

假設目錄結構如下

Linux系統下的find 命令入門講解(舉例說明)

查找./d2目錄下文件名稱中帶有hello的文件。

$ find ./d2 -name "*hello*"
./d2/hello.c
./d2/hello_world.c

注意:命令中的*是通配符。另外,所有的文件夾都會被遞歸查找。

如果我們把路徑指定為/(根目錄),就會搜索整個文件系統(時間很長),所以請小心使用。當然,隨時可以通過按下Ctrl + C來終止命令。

注意:當指定文件夾的時候(例如示例中的./d2文件夾),忽略末尾的斜槓是沒有問題的。但是,如果文件夾是一個指向其它位置的鏈接,那就必須在末尾寫上斜槓,比如./d2/

忽略大小寫

在上面的例子中,結果是沒有Hello.c的。如果還要把這個文件找出來,就要指定忽略大小寫——在name前面加上字母i(表示 ignore)。

find ./d2 -iname "*hello*"
./d2/Hello.c
./d2/hello.c
./d2/hello_world.c

非常建議用雙引號或單引號括住要匹配的模式(比如例子中的文件名)。不這樣做的話有時也能正常工作,但有時會產生奇怪的結果。

反向查找

除了查找滿足條件的文件之外,我們還可以查找不滿足條件的。比如我們要查找滿足條件A但是不滿足條件B的文件。

還是剛才的目錄結構

Linux系統下的find 命令入門講解(舉例說明)

假設我們要查找名稱中不含有字符串hello的文件,那麼需要在-name的前面加上-not。

find ./d2 -not -name "*hello*" 

./d2
./d2/Hello.c
./d2/hell.c
./d2/world.c

我們也可以使用感嘆號 !(可以理解為“非”) 來代替 -not。

$ find ./d2 ! -name "*hello*"
./d2
./d2/Hello.c
./d2/hell.c
./d2/world.c

組合條件查找(與)

我們可以查找同時滿足多個條件的文件。比如要查找文件名中含有字符串hello但是不含有字符串world的文件。

find ./d2 -name "*hello*" ! -name "*world*"
./d2/hello.c

組合條件查找(或)

當我們使用多個查找條件時, find 命令會把每個條件通過 -a(and)操作符結合起來。也就是說,只有同時滿足所有條件的文件才會被列出。如果我們要查找滿足條件A或者滿足條件B的文件,需要使用 -o(or) 開關。

比如要查找文件名中含有字符串hello或含有字符串world的文件。

 find ./d2 -name "*hello*" -o -name "*world*"
./d2/hello.c

./d2/hello_world.c
./d2/world.c

只查找文件或只查找目錄

假設目錄結構如下

Linux系統下的find 命令入門講解(舉例說明)

$ find ./ -name "*hello*"
./hello
./d2/hello.c
./d2/hello_world.c

上面的查找結果既包含目錄又包含文件。

用-type f選項指定只列出普通文件。

$ find ./ -name "*hello*" -type f
./d2/hello.c
./d2/hello_world.c

用-type d選項指定只列出目錄。

$ find ./ -name "*hello*" -type d
./hello

類似的還有-type p(有名管道),-type c(字符設備)等。

同時在多個目錄下查找

假設目錄結構如下

Linux系統下的find 命令入門講解(舉例說明)

$ find ./d1 ./d2 -name "*.c"
./d1/a.c
./d1/b.c
./d2/Hello.c
./d2/hello.c
./d2/hell.c
./d2/hello_world.c
./d2/world.c


分享到:


相關文章: