如何從任意目錄尋找文件

如何從任意目錄尋找文件

我正在嘗試尋找一個名為書1

在我的測試中,我試圖尋找上述文件,但在此測試中,我不知道該文件位於何處。

我嘗試過find / -iname book1,但沒有輸出。

如果我不知道名為 book1 的檔案所在位置,如何使用命令列找到該檔案?

編輯:

下面更詳細地描述了我的場景:

  1. 檔案副檔名未知
  2. 確切的名稱(即大寫字母、數字等)未知
  3. 文件位置未知

答案1

首先,參數-iname是一個 shell圖案。您可以閱讀有關模式的更多信息bash手冊。重點是為了find真正尋找文件的檔案名稱必須與指定的模式相符。要使不區分大小寫的字串book1匹配Book1.gnumeric,您必須添加*以下內容:

find / -iname 'book1*'

或指定全名:

find / -iname 'Book1.gnumeric'

其次,-inamefind忽略檔案名稱大小寫,因此如果您指定它 也可能-iname book1會找到等Book1bOok1Book1.gnumeric-iname-name

find / -name 'Book1.gnumeric'

第三,請記住引用中所述的模式其他答案

最後 - 您確定要找該文件嗎 到處在你的系統上?$HOME如果您處理過該文件或從某處下載了該文件,則您要查找的文件實際上可能位於您的目錄中。同樣,這可能會快得多。

編輯

我注意到你編輯了你的問題。如果您確實不知道完整的檔案名稱、大小寫和位置,您應該使用如下所示的內容:

find / -iname 'book1*'

我還建議將其放在2>/dev/null行尾以隱藏以非 root 使用者*permission denied*身分呼叫時將出現的所有錯誤和其他錯誤:find

find / -iname 'book1*' 2>/dev/null

如果您確定要尋找單一文件,且系統上只有一個文件符合您可以在find找到第一個符合文件後退出的條件:

find / -iname 'book1*' -print -quit 2>/dev/null

答案2

你可以嘗試一下locate命令。它使用檔案名稱資料庫來加快搜尋速度。

要搜尋所有符合的檔案*book1*並忽略大小寫,您可以使用

locate -i book1

如果你想搜尋文件開始book1需要自己做通配符:

locate -i 'book1*'

它比 快得多find,但僅與上次刷新資料庫時一樣最新。

答案3

如果您知道有一個名為 的文件book1.something,其中文件位置、 的確切值something以及文件名的大小寫模式均未知:

find / -iname 'book1.*'

如果您確定的只是檔案名稱包含單字book,您可以使用以下命令產生一個可能更大的列表

find / -iname '*book*'

的參數-name是 shell glob 模式。從檔案所在的目錄中,比較:

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric

這代表 執行的搜尋類型-name。此-iname選項僅允許不區分大小寫的版本。

答案4

透過 Zsh,你可以使用 glob 模式,所以這也有效:

ls -a /**/book1

這將找到名為的文件所在的所有位置book1

在我的測試中,這似乎比使用更快find,而且它幾乎不會產生任何結果使用者權限錯誤當沒有 root 權限運行時

手動的

相關內容