[英]How can I recursively find all files in current and subfolders based on regular expressions
[英]How can I recursively find all files in current and subfolders based on wildcard matching?
如何根據通配符匹配遞歸查找當前文件夾和子文件夾中的所有文件?
管道 find 到 grep 通常更方便; 它為您提供了用於任意通配符匹配的正則表達式的全部功能。
例如,要查找文件名中包含不區分大小寫字符串“foo”的所有文件:
~$ find . -print | grep -i foo
find
將查找與模式匹配的所有文件:
find . -name "*foo"
但是,如果你想要一張圖片:
tree -P "*foo"
希望這可以幫助!
find -L . -name "foo*"
在少數情況下,我需要 -L 參數來處理符號目錄鏈接。 默認情況下,符號鏈接被忽略。 在這些情況下,這很令人困惑,因為我會將目錄更改為子目錄並查看與模式匹配的文件,但 find 不會返回文件名。 使用 -L 解決了這個問題。 find 的符號鏈接選項是 -P -L -H
如果您的 shell 支持新的 globbing 選項(可以通過: shopt -s globstar
啟用),您可以使用:
echo **/*foo*
遞歸查找任何文件或文件夾。 這受到 Bash 4、zsh 和類似 shell 的支持。
我個人已經定義了這個 shell 函數:
f() { find . -name "*$1*"; }
注意:上面的行可以直接粘貼到 shell 或添加到用戶的~/.bashrc
文件中。
然后我可以通過鍵入以下內容來查找任何文件:
f some_name
或者,您可以使用具有簡單語法的fd
實用程序,例如fd pattern
。
利用
find path/to/dir -name "*.ext1" -o -name "*.ext2"
解釋
find
進行遞歸。-o
代表-or
。 所以上面的意思是搜索這個通配符或這個。 如果您只有一種模式,則不需要-o
。find <directory_path> -type f -name "<wildcard-match>"
在通配符匹配中,您可以提供您希望匹配的字符串,例如 *.c(適用於所有 c 文件)
您可以使用:
# find . -type f -name 'text_for_search'
如果你想使用 REGX 使用-iname
# find . -type f -iname 'text_for_search'
用於文件搜索
find / -xdev -name settings.xml
--> 整台計算機
find ./ -xdev -name settings.xml
--> 當前目錄及其子目錄
對於具有擴展名類型的文件
find . -type f -name "*.iso"
我很驚訝地發現,當我們要遞歸時,locate 並沒有被大量使用。
我會先定位“$PWD”以獲取當前感興趣的文件夾中的文件列表,然后隨意對它們運行 greps。
locate "$PWD" | grep -P <pattern>
當然,這是假設 updatedb 已經完成並且索引會定期更新。 這種查找文件的方法比運行查找並要求它沿樹向下查找要快得多。 為了完整起見,提到這一點。 如果樹不是很重,沒有什么反對使用 find 的。
搜索遞歸文件的默認方式,在大多數情況下可用
find . -name "filepattern"
它從您所在的當前目錄開始遞歸遍歷文件名或模式。 使用 find 命令,您可以使用通配符和各種開關來查看完整的選項列表,輸入
man find
或者如果您的系統上沒有手冊頁
find --help
然而,有更多現代和更快的工具然后找到,它們遍歷你的整個文件系統並索引你的文件,一個這樣的常用工具是定位或定位/mlocate,你應該檢查你的操作系統手冊關於如何安裝它,一旦它安裝它需要啟動數據庫,如果安裝腳本不為你做,可以通過鍵入手動完成
sudo updatedb
並且,使用它來查找某些特定的文件類型
locate filename
或者,要從當前目錄中查找文件名或模式,您可以鍵入:
pwd | xargs -n 1 -I {} locate "filepattern"
它將查看其文件數據庫並快速打印出與您鍵入的模式匹配的路徑名。 要查看 locate 選項的完整列表,請輸入: locate --help
或man locate
此外,您可以配置 locate 以通過 cron 作業在預定時間更新其數據庫,因此在凌晨 1 點更新 db 的示例 cron 如下所示:
0 1 * * * updatedb
這些 cron 作業需要由 root 配置,因為 updatedb 需要 root 權限才能遍歷整個文件系統。
以下命令將列出當前及其子文件夾中具有確切名稱“模式”(例如)的所有文件。
find ./ -name "pattern"
如果要使用通配符搜索特殊文件,可以使用以下代碼:
find . -type f -name "*.conf"
假設,您想從這里搜索每個 .conf 文件:
.
表示從此處開始搜索(當前位置)
-type
表示搜索項的類型,這里是文件 (f)。
-name
表示您要搜索具有*.conf名稱的文件。
下面的命令有助於搜索任何文件
1) 不分情況
2)結果未經許可排除文件夾
3)從根目錄或您喜歡的路徑搜索。 使用您喜歡的路徑更改 / 。
句法 :
查找 -iname '' 2>&1 | grep -v "權限被拒絕"
例子
查找 / -iname 'C*.xml' 2>&1 | grep -v "權限被拒絕"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
這將搜索當前和子目錄中的所有相關文件,分別計算它們的行數以及完全計算它們的行數:
find . -name "*.wanted" | xargs wc -l
如果已安裝,請嘗試使用fd
命令。 安裝說明
查找所有以“名稱”開頭的文件
fd "name*"
此命令忽略所有.hidden
和.gitignore
ed 文件。
要包含.gitignore
ed 文件,請添加-I
選項,如下所示
fd -I "name*"
要包含隱藏文件,請添加-H
選項,如下所示
fd -H "name*"
您也可以使用 ripgrep。 手冊頁: https://www.mankier.com/1/rg#--files
例子:
搜索所有包含 substring psql的文件名
rg --files | rg psql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.