
我正在嘗試尋找一個名為書1。
在我的測試中,我試圖尋找上述文件,但在此測試中,我不知道該文件位於何處。
我嘗試過find / -iname book1
,但沒有輸出。
如果我不知道名為 book1 的檔案所在位置,如何使用命令列找到該檔案?
編輯:
下面更詳細地描述了我的場景:
- 檔案副檔名未知
- 確切的名稱(即大寫字母、數字等)未知
- 文件位置未知
答案1
首先,參數-iname
是一個 shell圖案。您可以閱讀有關模式的更多信息bash手冊。重點是為了find
真正尋找文件的檔案名稱必須與指定的模式相符。要使不區分大小寫的字串book1
匹配Book1.gnumeric
,您必須添加*
以下內容:
find / -iname 'book1*'
或指定全名:
find / -iname 'Book1.gnumeric'
其次,-iname
將find
忽略檔案名稱大小寫,因此如果您指定它 也可能-iname book1
會找到等Book1
。bOok1
Book1.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 權限運行時
看手動的。