成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于 find 命令的15個超級有用的例子

系統 Linux
本文我們會分享關于 find 命令的一些常見示例。不過在此之前,我們先來看一下它的語法,以及如何使用。

find 命令用于在 Linux 命令行中搜索文件和目錄。

find 是功能最強大、使用最頻繁的命令之一,同時也是選項最多的命令之一,它有50多個選項,很容易讓人弄混了,特別是當它與 exec 或 xargs 命令一起使用的時候。

作為系統管理員或者軟件開發者,在命令行中工作時都不可避免的會使用到 find 命令。所以,與其畏難而逃避它,不如知難而進,擁抱它的力量。

本文我們會分享關于 find 命令的一些常見示例。不過在此之前,我們先來看一下它的語法,以及如何使用。

Linux 中的 find 命令

find 命令的一般語法為:

find [directory to search] [options] [expression]

方括號 [] 中所有的內容都是可選的,這意味著你可以在沒有任何選項和參數的情況下運行 find 命令。不過這只會打印出當前路徑下所有的文件和目錄,這樣沒什么用處,對吧?

我們來詳細了解一下它的參數。

  • directory to search:要搜索的目錄,基本上就是我們要開始搜索的位置。默認情況下,搜索是遞歸的(也會搜索子目錄),從當前位置開始;
  • options:選項,指定搜索的類型,可以按文件名稱、文件類型、修改時間等(進行搜索),這里有50多個選項;
  • expression:指定的搜索詞。如果是要按文件名查找,那么搜索詞就是文件名;如果是要查找名稱與表達式匹配的文件,那這里就用表達式。

看下面的例子:

find . -type f -name myfile

該命令將在當前目錄及其子目錄中進行搜索,查找名為 myfile 的文件(不是目錄)。選項 -type f 表示只查找文件,單點 . 表示當前目錄。

按名稱查找文件和目錄

可以按文件名搜索文件和目錄:

find . -name SEARCH_NAME

由于沒有指定文件類型,所以它會搜索具有給定名稱的文件和目錄。

下面的例子找到名為 mystuff 的文件和目錄:

[gliu@fedora work]$ find -name mystuff./new/mystuff./mystuff

只查找文件或目錄

如果只想查找文件,那么需要指定文件類型 -f

find . -type f -name SEARCH_NAME

類型和名稱的順序無關緊要。上一個例子中,只查找文件,可使用如下命令:

[gliu@fedora work]$ find -type f -name mystuff./mystuff

如果只搜索目錄,那么指定類型 -d

find . -type d -name SEARCH_NAME

還是上面那個例子,如果只查找目錄,使用如下命令:

[gliu@fedora work]$ find -type d -name mystuff./new/mystuff

執行不區分大小寫的搜索

默認情況下,find 命令區分大小寫。如果我們想要執行不區分大小寫的搜索,可以使用 -iname 來代替 -name

find . -type f -iname SEARCH_NAME

也可以將其與 -d 選項一起使用。

[gliu@fedora work]$ find -iname mystuff./new/mystuff./MyStuff./mystuff

按擴展名搜索(重要)

find 命令最常見的用法之一就是查找指定類型的文件,或者說是按照文件擴展名來進行查找。

比如,我們要在當前目錄下搜索所有的 C++ 文件,而C++文件的擴展名是 .cpp,所以我們可以這樣搜索:

find . -type f -name "*.cpp"

這樣,我們告訴 find 命令查找類型為文件(file),并且以 .cpp 結尾的文件。

[gliu@fedora work]$ find . -type f -name "*.cpp"
./file.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream2/zstream_test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/zf

注意:在使用 find 命令時,需要將表達式放在雙引號中。

為什么要將表達式放在雙引號中呢?因為如果要不這樣做的話,shell會擴展通配符,將其替換為當前目錄中所有以 .cpp 結尾的文件。

比如,假如當前目錄下有兩個文件:file1.cpp, file2.cpp,那么下面的命令:

find . -type f -name *.cpp

會被shell擴展為:

find . -type f -name file1.cpp file2.cpp

這種情況下,shell 就會給出提示:

find: paths must precede expression: 'file1.cpp'find: possible unquoted pattern after predicate '-name'?

另外,如果當前目錄下只有一個擴展名為.cpp的文件,那就可以。

搜索多個擴展名(或條件)的多個文件

上述命令搜索給定擴展名的文件。那如果要同時搜索不同擴展名的文件,該怎么辦呢?

可以使用邏輯或(OR) -o 來運行 find 命令:

find . -type f -name "*.cpp" -o -name "*.txt"

這樣,就會搜索擴展名為 .cpp 或 .txt 的文件:

[gliu@fedora work]$ find . -type f -name "*.txt" -o -name "*.cpp"
./new.txt
./file.cpp
./new/new.txt
./new/dir2/another.txt
./new/dir1/new.txt
./another.txt

在指定目錄中查找文件

我們上面的例子都是在當前目錄中搜索,因為我們在命令中指定了 . 作為當前路徑。

點 . 可以替換為絕對路徑或者相對路徑。這樣我們就可以在不離開當前路徑的情況下,在指定的目錄中查找文件。

[gliu@fedora work]$ find ./new -name mystuff ./new/mystuff

在多個目錄中搜索文件

如果你認為所要查找的文件可能位于多個位置,那么不必多次運行 find 命令,只需在 find 命令中指定要搜索的所有目錄路徑即可:

find ./location1 /second/location -type f -name "pattern"

查找空文件和目錄

-empty 選項可以讓你使用 find 命令查找空文件和目錄。比如要查找當前路徑下所有的空文件和目錄,可使用如下命令:

find . -empty

也可以指定搜索的文件類型,只查找文件或者目錄:

find . -empty -type f

還可以結合文件名使用:

find . -empty -type f -name "*.cpp"

查找大文件或小文件(根據文件大小搜索)

根據文件的大小執行搜索,可以查找大文件或者小文件。但這只適用于文件,不適用于目錄。

要根據文件的大小搜索,可以使用 -size 選項,后面跟上一個值N(即文件的大小),+N 查找大于 N 的文件,-N 查找小于 N 的文件。

比如,查找大小正好為 50KB 的文件:

find . -size 50k

在當前路徑下查找大于 1G 的文件:

find . -size +1G

查找小于 20 bytes 的文件(注意單位是c而不是b):

find . -size -20c

要查找大于100 MB 但小于 2 GB 的文件:

find . -size +100M -size -2G

此外,還可以結合名稱搜索。比如,要在根目錄中查找以 .log 結尾,大于500MB的文件,可使用如下命令:

find / -size +500M -name "*.log"

關于文件大小值 N 的單位:

  • c : bytes(字節)
  • k: kilobytes(千字節)
  • M: Megabytes(兆字節)
  • G: Gigabytes(GB)

查找最近修改的文件(根據修改或創建時間搜索)

我們先來簡單介紹下mtime, atime ctime 的概念:

  • mtime:文件上次修改的時間;
  • ctime:文件創建的時間;
  • atime:文件上次訪問的時間。

我們經常會有查找最近修改過的文件的需求,這時候,可以按修改時間來搜索文件。

比如,要查找 3天(3 * 24H)以內修改過的所有文件:

find . -type f -mtime -3

再比如,查找 5天以前創建的文件:

find . -type f -ctime +5

上述命令是以天為單位。那么,如果要搜索幾分鐘前修改過的文件呢?可以使用 mmin, amin cmin。

比如,要查找 5分鐘以內修改過的文件,可使用如下命令:

find . -type f -mmin -5

此外,還可以結合名稱,指定時間的上限和下限進行搜索。比如,下面的命令將搜索過去20分鐘到30分鐘內,修改過的所有 .java 文件:

find . -type f -mmin +20 -mmin -30 -name "*.java"

查找具有特定文件權限的文件

find命令允許您搜索具有特定權限的文件。

find -perm mode

比如,在當前路徑下查找所有權限模式為 777 的文件:

find . -perm 777

查找具有讀寫權限的文件(完全匹配,如果文件權限為 讀寫和執行,則不匹配):

find . -perm a=r+w

根據文件的所屬用戶查找

find 還可以根據文件的所有權進行搜索。

比如,在當前路徑下搜索用戶 John 所擁有的文件:

find . -type f -user John

當然,也可以與其他選項(比如文件大小,時間,名稱等)結合使用:

find . -type f -user John -name "*.cpp"

不遞歸查找,僅在當前目錄中搜索

默認情況下,find 命令在當前位置的所有子目錄中搜索。如果不希望這樣,可以將搜索深度指定為 1。這將限制搜索僅限于當前目錄,不包括任何子目錄。

find . -maxdepth 1 -type f -name "*.txt"

圖片



從搜索中排除目錄

如果要將某個目錄從搜索中排除,可以結合 -path, -prune-o 一起使用:

find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME

注意路徑中的星號 *, -prune 選項在路徑之后,-o 選項在 prune 之后。

基本上,prune命令要求不使用路徑指定的值,它總是與 -o 一起使用,以確保 -o 的右側只針對未被排除的目錄。

處理 find 命令的輸出結果(使用 exec 和 xargs)

到目前為止,我們介紹了關于find命令的一些標準查找文件的方法。此外,還可以通過對 find 命令的結果執行某些操作,來改進它。

例如,查找與特定名稱模式匹配的文件并一次性重命名,或者查找空文件并刪除。

我們知道,管道重定向可以用于將一個命令的輸出與另一個命令輸入相結合。但這對find命令的輸出不起作用,至少不直接起作用。

如果要對find命令的結果執行操作,有兩個選項,即 exec xargs

使用 find 和 exec

假如我們要對 find 的結果使用 ls -l 列出來,看下面的例子:

find . -type f -name "*.txt" -exec ls -l {} +

以下是輸出:?

[gliu@fedora work]$ find . -type f -name "*.txt" -exec ls -l {} +
-rw-rw-r-- 1 gliu gliu 39 Oct 13 19:30 ./another.txt
-rw-rw-r-- 1 gliu gliu 35 Oct 13 15:36 ./new/dir1/new.txt
-rw-rw-r-- 1 gliu gliu 35 Oct 13 15:36 ./new/dir2/another.txt
-rw-rw-r-- 1 gliu gliu 35 Oct 13 18:51 ./new/mystuff/new.txt
-rwxrwxrwx 1 gliu gliu 35 Oct 13 15:37 ./new/new.txt
-rw-rw-r-- 1 gliu gliu 35 Oct 13 18:16 ./new.txt

不要忘記 exec 命令最后的 {} +,并且要注意 {} + 之間的空格。

花括號 {} 引用 find 命令的結果,你可以將其認為是 {file1, file2, file3}。加號 + 用于終止 exec 命令。

exec 還有另一個約定:

find . -type f -name *.txt" -exec ls -l

上述命令中,分號 ; 用于代替加號 +,分號前面的反斜杠 \ 用于轉義特殊字符。

{} + 的優點是它運行的命令更少,它就相當于是 ls -l file1 file2 file3;而 {} \ 則相當于運行 ls -l file1, ls -l file2, ls -l file3

但是,{} \;具有在同一 exec 語句中多次使用 {} 的優點。例如,下面的命令將使用 .old 擴展名重命名所有找到的文件:

find . -type f -name *.txt" -exec mv {} {}.old

使用 xargs

許多 Linux 用戶已經習慣了管道重定向。這個帶有尾隨 { }+ 的 exec 命令對他們來說似乎不太習慣。

這就是 xargs 命令存在的價值,你只需要通過管道將 find 命令的輸出解析到 xargs 命令:

find . -type f -name *.txt" | xargs ls -l

圖片


find 結合 grep 使用

上面我們介紹了 find 結合 exec xargs 命令的使用,此外,還可以將 find 與 grep 命令一塊使用。

對于任何系統管理員或軟件開發人員來說,find 和 grep 是最常見且最有用的組合之一。

你可以使用 find 命令來查找文件,然后使用 grep 命令來搜索這些文件的內容。

比如,我們要搜索所有包含 “Alice”一詞的 txt 文件,那么可以這樣搜索:

find . -type f -name "*.txt" -exec

同樣的,也可以使用 xargs 命令:

find . -type f -name "*.txt"

圖片


當然,這是最簡單的例子,如果你熟悉 grep 命令,可以根據自己的需求和喜好使用它。

find 命令的用法還有很多,我們列舉了一些相對比較常用的。當你開始熟悉 find 命令的時候,就可以在各種情況下使用。

責任編輯:龐桂玉 來源: TIAP
相關推薦

2013-10-08 16:24:34

Linux find命

2013-10-08 15:51:03

Linux find命

2020-05-20 13:45:52

Linuxtouch命令

2022-12-25 16:03:31

JavaScript技巧

2022-12-22 14:44:06

JavaScript技巧

2023-07-18 07:56:31

工具reduce業務

2023-06-28 00:02:40

2020-04-16 14:20:16

Linuxtouch命令

2018-08-03 11:07:52

dd命令備份Linux系統

2023-05-30 15:11:16

JavaScrip開發功能

2022-12-19 15:23:51

JavaScrip開發語言

2023-01-09 10:29:41

mv命令Linux

2023-03-23 21:08:59

head命令

2023-03-24 10:07:46

tail命令

2012-01-17 13:54:02

PHP

2015-09-28 11:22:55

命令行補全Linux

2011-04-15 15:16:18

代碼編程

2023-02-22 16:43:05

Web開發github

2020-06-17 05:44:44

人工智能AI機器學習

2020-12-14 11:43:27

人工智能智能軟件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产午夜影院 | 波多野结衣在线观看一区二区三区 | 男人天堂久久久 | 淫片专区| 日韩在线免费视频 | 中文字幕成人免费视频 | 精品一区二区三区四区视频 | 波多野结衣二区 | 国产日韩一区二区 | 亚洲一区二区三区在线观看免费 | 麻豆国产一区二区三区四区 | 国产亚洲www| 久久三级影院 | 国产日韩精品一区二区 | www.9191 | 亚洲毛片网站 | 成人免费网站 | 欧美一区二区三区在线观看视频 | 蜜桃视频在线观看免费视频网站www | 亚洲一区二区视频 | 日韩欧美精品在线 | 亚洲一区二区在线视频 | 人人操日日干 | 国产精品视屏 | 91在线一区 | 精品欧美一区二区精品久久久 | 久久免费大片 | 天天插天天搞 | hitomi一区二区三区精品 | 女人天堂av | 成人a在线观看 | 综合久久久 | 国产精品久久久久久亚洲调教 | 国产精品久久久久久久久久东京 | 日韩国产中文字幕 | 日韩小视频 | 国产成人精品一区二区三区网站观看 | 999久久久久久久久6666 | 久久夜色精品国产 | 黄色a三级| 三级视频在线观看电影 |