成人免费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 15:51:03

Linux find命

2013-10-08 16:24:34

Linux find命

2020-05-20 13:45:52

Linuxtouch命令

2023-06-28 00:02:40

2022-12-25 16:03:31

JavaScript技巧

2022-12-22 14:44:06

JavaScript技巧

2023-07-18 07:56:31

工具reduce業務

2020-04-16 14:20:16

Linuxtouch命令

2023-05-30 15:11:16

JavaScrip開發功能

2022-12-19 15:23:51

JavaScrip開發語言

2018-08-03 11:07:52

dd命令備份Linux系統

2023-01-09 10:29:41

mv命令Linux

2023-03-23 21:08:59

head命令

2023-03-24 10:07:46

tail命令

2015-09-28 11:22:55

命令行補全Linux

2012-01-17 13:54:02

PHP

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技術棧公眾號

主站蜘蛛池模板: 自拍视频网站 | 一级a性色生活片久久毛片波多野 | 免费黄视频网站 | 欧美日韩国产精品一区 | 丁香婷婷在线视频 | 男女羞羞网站 | 国产精品免费一区二区三区 | 欧美激情精品久久久久久 | 欧美日一区二区 | 精品欧美激情精品一区 | 国产精品久久久久一区二区三区 | 国产精品二区三区在线观看 | 免费一级毛片 | 久久久久久网站 | 欧美自拍一区 | 毛色毛片免费看 | 国产精品亚洲精品久久 | 精精国产xxxx视频在线播放7 | 在线色网 | 99久久精品国产毛片 | 国产99久久精品一区二区永久免费 | 超级碰在线 | 中文字幕综合 | 在线精品国产 | 日本久久网 | 伊人网站| 在线观看亚洲一区二区 | 好姑娘影视在线观看高清 | 欧美国产日韩在线观看 | 日韩欧美三级电影 | 美日韩免费视频 | 日韩精品999 | 成人在线免费观看视频 | 91视频在线看 | 成人网在线看 | 成人av一区二区在线观看 | 日韩在线免费视频 | 一区二区三区视频在线观看 | 国产日韩一区二区 | 91久久久久久 | 国产精品二区三区在线观看 |