更有效地使用 ‘find’ 命令搜索目錄的方法

本教程將帶您了解在Linux中尋找目錄的不同方法。正如您可能已經知道的那樣,在Linux中,一切皆為文件,包括目錄。Linux用戶在命令行中常見的操作之一是搜索文件或目錄

有幾種不同的方法和工具可用於在命令行中搜索文件,例如findlocatewhich。然而,最後一個工具(which)僅用於定位命令。

在本教程的範圍內,我們將主要關注find工具,它在實時Linux文件系統中搜索文件,相對於locate更高效和可靠。

locate的缺點在於它讀取由updatedb創建的一個或多個數據庫,而不是搜索實時文件系統。此外,它也不提供靈活性,無法指定搜索的起始位置。

以下是運行locate命令的語法:

# locate [option] [search-pattern]

為了展示locate的缺點,讓我們假設我們正在當前工作目錄中搜索名為pkg的目錄。

注意:在下面的命令中,選項--basename-b告訴locate僅匹配文件(目錄)基本名(即pkg),而不是路徑(/path/to/pkg)。其中\是一個globbing字符,它禁用了對pkg的隱式替換為*pkg*

$ locate --basename '\pkg'
Find Directory Using locate Command

從上面的命令輸出中可以看到,locate將從根目錄(/)開始搜索,這就是為什麼其他具有相同名稱的目錄也會匹配。

因此,為了應對這個問題,請使用以下簡化語法來使用find

$ find starting-point options [expression]

讓我們看幾個例子。

要在當前工作目錄中搜索與上面相同的目錄(pkg),運行以下命令,其中-name標誌讀取表達式,這在這種情況下是目錄基本名。

$ find . -name "pkg"

如果遇到“Permission denied”錯誤,請使用sudo command 這樣使用:

$ sudo find . -name "pkg"
Search a Directory Using find Command

您可以使用-type标志来阻止find搜索其他文件类型,除了目录,如下命令所示:

$ sudo find . -type d -name "pkg"

此外,如果您想以长列表格式列出目录,请使用动作开关-ls

$ sudo find . -type d -name "pkg" -ls
Find and List Directory

接下来,选项-iname将启用不区分大小写的搜索:

$ sudo find . -type d -iname "pkg" 
$ sudo find . -type d -iname "PKG" 
Find Directory with Case Sensitive

要查找更多有趣且高级的使用信息,请阅读findlocate的手册页面。

$ man find
$ man locate

最后,find命令在Linux系统中搜索文件(或目录)时比locate命令更可靠且高效。

与之前一样,请不要忘记通过下面的评论部分发送您的反馈或问题。最后,请始终保持与Tecmint的联系。

Source:
https://www.tecmint.com/find-directory-in-linux/