當前位置:
首頁 > 知識 > 不可錯過的find命令詳解,小編怒推!

不可錯過的find命令詳解,小編怒推!

Linux系統中的 find 命令在查找文件時非常有用而且方便。它可以根據不同的條件來查找文件,例如許可權、擁有者、修改日期/時間、文件大小等等。在這篇文章中,我們將學習如何使用 find 命令以及它所提供的選項來查找文件。

在絕大多數Linux發行版中,你都可以直接使用 find 命令而無需進行任何安裝操作。如果你想在linux系統的命令行中變得特別高效,那麼 find 是你必須掌握的命令之一。

find 命令的基本語法如下:

一、基本用法1.列出當前目錄和子目錄下的所有文件

這個命令會列出當前目錄以及子目錄下的所有文件。

該命令與以下命令效果相同

2. 查找特殊的目錄或路徑

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

`

下面的命令用於查找指定名稱的文件。

也可以使用通配符

請注意,所有的文件夾都會被遞歸地查找。所以,這是用於查找指定擴展名文件的一種非常強大的方式。

如果我們嘗試搜索 / 文件夾,也就是根目錄,就會搜索整個文件系統,包括掛載的設備以及網路存儲設備。所以請小心使用。當然,你隨時可以通過按 Ctrl + C 來終止命令。

注意:當指定文件夾的時候(例如示例中的"./test"文件夾),忽略末尾的斜杠是沒有問題的。但是,如果文件夾是一個指向其它位置的鏈接(symlink)時,你必須在末尾寫上斜杠才能使find命令正常工作(find ./test/)。

忽略大小寫

在查找文件名時,忽略大小寫往往非常有用。要忽略大小寫,只需要使用 iname 選項,而不是 name 選項。

總是用雙引號或單引號來包圍匹配模式(文件名參數),這非常有用。不這樣做的話有時也能正常工作,有時也可能會產生奇怪的結果。

3. 限制目錄查找的深度

find 命令默認會遞歸查找整個目錄樹,而這非常消耗時間和資源。好在目錄查找的深度可以手動指定。例如我們只想查找一到兩層以內的子目錄,可以通過 maxdepth 選項來指定。

第二個示例中指定了 maxdepth 為1,表明最多只查找一層內的子目錄,也就是只查找當前文件夾。

當我們只想在當前目錄下查找,而不是查找整個目錄樹的時候,這個選項會特別有用。

與 maxdepth 選項相似,還有一個選項叫做 mindepth ,正如名字所表示的那樣,它會至少到達第 N 層子目錄後才開始查找文件。

4. 反向查找

除了查找滿足條件的文件之外,我們還可以查找不滿足條件的所有文件。當我們知道要在查找中排除哪些文件時,這個選項就能發揮作用了。

在上面的示例中我們找到了所有擴展名不是 php 的文件和文件夾。我們也可以使用感嘆號 ! 來代替 -not。

5. 結合多個查找條件

我們可以同時使用多個查找條件來指定文件名並排除某些文件。

上面的命令查找所有以 abc 開頭並且不含 .php 擴展名的文件。這個示例展現了 find 命令自帶的查找表達式是多麼的強大。

OR 操作符

當我們使用多個查找條件時, find 命令會將它們通過 AND 操作符結合起來,也就是說,只有滿足所有條件的文件才會被列出。不過,如果我們需要進行基於 OR 運算的查找時,可以加上 -o 開關。

上面的命令查找所有以 .php 結尾或者以 .txt 結尾的文件。

6. 只查找文件或目錄

有時我們只想通過某個名字查找對應的文件或對應的目錄,我們可以很容易實現這個要求。

只查找文件

只查找目錄

非常有用而且方便!

7. 同時在多個目錄下查找

如果你想要在兩個不同的目錄內進行查找,命令非常簡單。

檢查一下,它確實列出了來自給定的兩個目錄的文件。

8. 查找隱藏文件

在Linux系統中,隱藏文件的名字以英文的句號開頭,即 . 。所以要列出隱藏文件,只需加上簡單的文件名過濾條件就行了。

二、基於文件許可權和屬性的查找9. 查找指定許可權的文件

通過指定 perm 選項,我們可以查找具有特定許可權的文件。下面的示例中查找了所有具有 0664 許可權的文件。

我們可以用這個命令來查找帶有錯誤許可權的文件,這些文件可能會產生安全問題。

可以結合 反向查找 來進行許可權檢查。

10. 查找具有 SGID/SUID 屬性的文件

下面的命令查找所有具有 644 許可權和 SGID 屬性的文件。

我們同樣可以使用 1664 來查找設置了 粘滯位 (sticky bit)的文件。

perm 選項除了接受數值型參數外,同樣接受 chmod 命令中的模式串。在下面的查找中,我們用另一種語法來代替數字。

注意:由於許可權不足,某些目錄會拒接訪問。命令中的 2>/dev/null 正是用於清除輸出中的錯誤訪問結果。

11. 查找只讀文件

12. 查找可執行文件

三、基於文件擁有者和用戶組的查找13. 查找屬於特定用戶的文件

查找當前目錄下,屬於 bob 的文件。

在指定所屬用戶的同時,我們同樣可以指定文件名。

很容易看出,我們可以通過增加過濾條件來縮小查找文件的範圍。

14. 查找屬於特定用戶組的文件

四、基於日期和時間的查找

除了上面介紹的查找條件外,另外一個非常棒的查找條件就是文件的修改和訪問時間(日期)。當我們想要找出哪些文件在某段時間內被修改的時候,這個查找條件將會非常方便。我們來看幾個例子。

15. 查找過去的第 N 天被修改過的文件

16. 查找過去的 N 天內被訪問過的文件

17. 查找某段時間範圍內被修改過內容的文件

18. 查找過去的 N 分鐘內狀態發生改變的文件

19. 查找過去的 1 小時內被修改過內容的文件

20. 查找過去的 1 小時內被訪問過的文件

五、基於文件大小的查找21. 查找指定大小的文件

22. 查找大小在一定範圍內的文件

23. 查找最大和最小的文件

我們可以將 find 命令與 ls 和 sort命令結合,從而找出最大或最小的文件。

下面的命令使用了 sort 命令的 -r 選項,也就是從大到小降序排列。經過 head 命令的過濾之後,會顯示當前目錄和子目錄下最大的5個文件。命令的執行過程需要一段時間,查找的速度取決於文件的總數。

同樣,我們可以去掉 sort 命令的 -r 選項來進行升序排列,從而顯示出最小的5個文件。

24. 查找空文件和空目錄

查找空文件:

查找空目錄:

非常簡單!

六、高級操作

find 命令不僅可以通過特定條件來查找文件,還可以對查找到的文件使用任意linux命令進行操作。下面給出兩個例子。

25. 使用 ls 命令列出文件信息

我們使用 find 命令找到文件後,只能看到文件路徑。如果想進一步查看文件信息,可以結合 ls 命令來實現。

26. 刪除找到的文件

下面的命令會刪除 tmp 目錄下擴展名為 .txt 的文件。

我們同樣可以刪除目錄,只要把 -type 後面的 f 改為 d ,並且在 rm 命令後面加上 -r 即可。

原文來自:http://www.codebelief.com/article/2017/02/26-examples-of-find-command-on-linux/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux資訊速推 的精彩文章:

Linux 或成2018 年開源技術最大贏家
SSH密碼驗證繞過

TAG:Linux資訊速推 |