Unix/命令/查詢檔案指南
在給定路徑中搜索檔案或資料夾。語法為:find [path...] [expression...]
示例: 在一些最新的類 Unix 作業系統中,-print 選項是預設的,可以省略。以下命令從根 ('/') 目錄開始搜尋檔案 'grub.conf'。
$ find / -name grub.conf /etc/grub.conf
如果您不是計算機的管理員,您將收到對所有您無權讀取的目錄的錯誤訊息。在這種情況下,對於 bash shell,請執行以下操作
$ find / -name grub.conf 2>/dev/null /etc/grub.conf
或者對於 csh/tcsh,請執行以下操作
$ find / -name grub.conf >& /dev/null /etc/grub.conf
如果您想忽略字元的大小寫,可以使用 -iname。以下將找到副檔名為 txt、TXT、Txt 等等的檔案
$ find / -iname '*.txt' /home/rtm/hacking.txt /home/bok/Documents/MyLetter.TXT /home/bok/tmp/found.tXt
以下命令將搜尋所有名為 'local' 的目錄。
$ find / -name local -type d /usr/X11R6/lib/X11/fonts/local /usr/local /var/cache/man/local /var/local
上面的示例結合了兩個測試 - 檔名 (-name) 和檔案型別 (-type) - 並返回滿足這兩個測試的檔案(邏輯與)。
還可以指定兩個或多個測試,並使用 -o(邏輯或)指令返回滿足其中任何一個測試的檔案。要進行 OR 操作的測試必須在 (...) 之間分組(必須用 \ 轉義,因為括號對 shell 有特殊含義)。以下返回副檔名為 txt 或 doc 的檔案,以及大小超過 5MB(兆位元組)的任何檔案。
$ find / \( -name '*.txt' -o -name '*.doc' -o -size +5M \) /home/rtm/hacking.txt /home/bok/report.doc /home/bok/backup/may.tar.bz2 /home/koppe/BiggerThan5Megs.doc
最後一個檔案滿足了兩個測試。
注意:每個指令必須完整,測試不能省略。例如,-name '*.txt' -o '*.doc'(省略第二個 -name)是無效的。
提示: 使用 'exec' 選項對 find 找到的每個檔案執行某些命令
$ find . -name '*bak' -exec rm -i {} \;
rm: remove regular empty file `./file1.bak'? y
rm: remove regular empty file `./file2.bak'? y
rm: remove regular empty file `./file3.bak'? y
使用 'ok' 的效果相同,但它會提示每個檔案
$ find . -name '*~' -ok rm {} \;
< rm ... ./RMAIL~ > ? y
警告: 當使用 "-exec" 或 "-ok" 時,必須使用分號來指示引數的結束(在示例中為 "rm")。因為分號對 shell 有特殊含義,所以必須將其引用。上面的示例用反斜槓引用分號。
連結
在正常的可執行檔案和手冊頁位置搜尋指定的檔案。似乎沒有被 POSIX 涵蓋。
示例
$ whereis ls ls: /bin/ls /usr/bin/ls /usr/man/man1/ls.1.gz /usr/share/man/man1/ls.1.gz
連結
- whereis 手冊頁, man7.org
- whereis 手冊頁, freebsd.org
在您的 PATH 變數中的位置搜尋指定的檔案。如果您知道程式在您的路徑中(即您可以執行它),這比 whereis 速度更快。
$ which pine /usr/bin/pine
連結
- GNU which 專案, savannah.gnu.org
- which 手冊頁, freebsd.org
查詢與指定查詢匹配的所有檔名。在傳統 UNIX 中不存在,是 GNU 軟體,並隨 Linux 標準提供。
示例
$ locate make.conf /etc/make.conf /etc/make.conf.orig /etc/make.conf.example /usr/qt/3/mkspecs/linux-g++/qmake.conf /usr/share/man/man5/make.conf.5.gz
請注意,locate 使用的是已收集的檔名資料庫,該資料庫通常每天更新一次。因此,使用 locate 不會正確顯示新建立或刪除的檔案/目錄。
連結
- 8.2 呼叫 locate 在 GNU Findutils 手冊中,gnu.org
- locate 手冊頁, freebsd.org
將輸入流中的專案轉換為另一個命令的引數以呼叫。一個常見的用法是與 find 結合使用。
示例
- echo a b c | xargs -n1 echo
- 輸出 a、b 和 c,每個都單獨一行;-n1 指定最多將 1 個輸入專案傳遞給命令一次。
- echo a,b,c | xargs -d, -n1 echo
- 在某些版本的 GNU xargs 中,輸出 a、b 和 c,每個都單獨一行。-d 指定專案分隔符。
連結
- xargs, opengroup.org
- xargs, freebsd.org
- 8.4 呼叫 xargs 在 GNU Findutils 手冊中,gnu.org
- xargs 原始碼, git.savannah.gnu.org
- W:xargs