在 Linux中find命令使用技巧
導讀 | 不管我決心如何組織檔案,似乎總有無法找到檔案的時候。有時是因為我不記得最初的檔名,其他時候,我知道名字,但我不記得在哪裡儲存它了。甚至有時我需要一個我最初就沒有建立的檔案。但是,無論遇到什麼困難,我知道在 POSIX 系統 上,總是有 find 可以幫助我。 |
find 由 POSIX 規範 定義,它建立了一個用於衡量 POSIX 系統的開放標準,這包括 、BSD 和 macOS。簡而言之,只要你執行的是 Linux、BSD 或 macOS,那麼 find 已經安裝了。
但是,並非所有的 find 命令都完全相同。例如,GNU 的 find 命令有一些 BSD、Busybox 或 Solaris 上 find 命令可能沒有或有但實現方式不同的功能。本文使用 findutils 包中的 GNU find,因為它很容易獲得且非常流行。本文演示的大多數命令都適用於 find 的其他實現,但是如果你在 Linux 以外的平臺上嘗試命令並得到非預期結果,嘗試下載並安裝 GNU 版本。
你可以藉助正規表示式使用完整或部分的檔名來定位檔案。find 命令需要你給出想搜尋的目錄;指定搜尋屬性選項,例如,-name 用於指定區分大小寫的檔名;然後是搜尋字串。預設情況下,搜尋字串按字面意思處理:除非你使用正規表示式語法,否則 find 命令搜尋的檔名正是你在引號之間輸入的字串。
假設你的 Documents 目錄包含四個檔案:Foo、foo、foobar.txt 和 foo.xml。以下是對 foo 的字面搜尋:
$ find ~ -name "foo" /home/tux/Documents/examples/foo
你可以使用 -iname 選項使其不區分大小寫來擴大搜尋範圍:
$ find ~ -iname "foo" /home/tux/Documents/examples/foo /home/tux/Documents/examples/Foov
你可以使用基本的 萬用字元來擴充套件搜尋。例如,* 表示任意數量的字元:
$ find ~ -iname "foo*" /home/tux/Documents/examples/foo /home/tux/Documents/examples/Foo /home/tux/Documents/examples/foo.xml /home/tux/Documents/examples/foobar.txt
? 表示單個字元:
$ find ~ -iname "foo*.???" /home/tux/Documents/examples/foo.xml /home/tux/Documents/examples/foobar.txt
這不是正規表示式語法,因此 . 在示例中只表示字母“點”。
你還可以使用正規表示式。與 -iname 和 -name 一樣,也有區分大小寫和不區分大小寫的選項。但不一樣的是,-regex 和 -iregex 搜尋應用於整個路徑,而不僅僅是檔名。這意味著,如果你搜尋 foo,你不會得到任何結果,因為 foo 與 /home/tux/Documents/foo 不匹配。相反,你必須要麼搜尋整個路徑,要麼在字串的開頭使用萬用字元:
$ find ~ -iregex ".*foo" /home/tux/Documents/examples/foo /home/tux/Documents/examples/Foo
要查詢近一週修改的檔案,使用 -mtime 選項以及過去的天數(負數):
$ find ~ -mtime -7 /home/tux/Documents/examples/foo /home/tux/Documents/examples/Foo /home/tux/Documents/examples/foo.xml /home/tux/Documents/examples/foobar.txt
你可以結合使用 -mtime 選項來查詢近幾天範圍內修改的檔案。對於第一個 -mtime 引數,表示上一次修改檔案的最近天數。第二個參數列示最大天數。例如,搜尋修改時間超過 1 天但不超過 7 天的檔案:
$ find ~ -mtime +1 -mtime -7
指定查詢檔案的型別來最佳化 find 的結果是很常見的。如果你不確定要查詢的內容,則不應該使用此選項。但如果你知道要查詢的是檔案而不是目錄,或者是目錄而不是檔案,那麼這可能是一個很好的過濾器。選項是 -type,它的引數是代表不同型別資料的字母程式碼。最常見的是:
- d - 目錄
- f - 檔案
- l - 連結檔案
- s - 套接字
- p - 命名管道(用於 FIFO)
- b - 塊裝置(通常是硬碟)
下面是一些例子:
$ find ~ -type d -name "Doc*" /home/tux/Documents $ find ~ -type f -name "Doc*" /home/tux/Downloads/10th-Doctor.gif $ find /dev -type b -name "sda*" /dev/sda /dev/sda1
find 命令預設是遞迴的,這意味著它會在指定的目錄中層層搜尋結果。這在大型檔案系統中可能會變得不堪重負,但你可以使用 -maxdepth 選項來控制搜尋深度:
$ find /usr -iname "*xml" | wc -l 15588 $ find /usr -maxdepth 2 -iname "*xml" | wc -l 15
也可以使用 -mindepth 設定最小遞迴深度:
$ find /usr -mindepth 8 -iname "*xml" | wc -l 9255
本文僅介紹 find 的基本功能,它是一個很好的搜尋工具,但對於強大的 Parallel 命令來說,它也是一個非常有用的前端。學習 find 的原因有很多,所以 下載我們免費的 find 速查表 吧,它可以幫助你瞭解有關該命令的更多資訊。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2848730/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux中file命令和find命令Linux
- linux find命令Linux
- linux find 命令Linux
- linux find 命令!Linux
- linux find 命令和 while 命令聯合使用案例LinuxWhile
- Linux下ulimit、find命令使用者LinuxMIT
- linux/unix find命令Linux
- Linux中find命令-path -prune用法詳解Linux
- Linux學習之linux的find命令如何使用?Linux
- Linux系統下find、locate命令如何使用?Linux
- 在 Linux 命令列中使用 ls 列出檔案的技巧Linux命令列
- Linux find 命令詳解Linux
- Linux find命令詳解Linux
- Linux精講——find命令Linux
- linux中查詢find命令的複雜用法Linux
- 為什麼要謹慎使用Linux find命令?Linux
- 在Linux中如何使用at命令安排任務Linux
- 命令列技巧:使用 find 和 xargs 查詢和處理檔案命令列
- Linux命令列中幾個使用history相關的技巧Linux命令列
- linux每日命令(20):find命令概覽Linux
- Linux 常用基本命令 findLinux
- (轉)Linux find命令詳解Linux
- Linux下find命令詳解Linux
- Linux Find 命令精通指南Linux
- Linux命令技巧Linux
- AIX中find命令和xargs命令介紹AI
- Linux/Unix重要find命令詳解Linux
- linux 查詢檔案命令 findLinux
- Linux下find命令的用法(轉)Linux
- 使用 xclip 在 Linux 命令列中複製貼上Linux命令列
- 使用 Calcurse 在 Linux 命令列中組織任務Linux命令列
- 如何使用 Find 和 Locate 在 Linux 中搜尋檔案Linux
- 每天一個linux命令:find命令之xargsLinux
- find 的命令的使用方法。
- find 命令
- find命令
- 在 Linux 下使用 scp 命令Linux
- 最實用的 Linux 命令列使用技巧Linux命令列