table of contents
other languages
other sections
| FIND(1) | General Commands Manual | FIND(1) | 
NAME¶
find - 遞歸地在層次目錄中處理檔案總覽 SYNOPSIS¶
find [path...] [expression]描述 DESCRIPTION¶
這個文件是GNU版本 find 命令的使用手冊。 find 搜索目錄樹上的每一個檔名,它從左至右運算給定的表達式,按照優先規則(見運 算符OPERATORS一節)進行匹配,直到得出結果(左邊運算在 '與' 操作中得出假, 在'或' 操作中得出真),然後 find 移向下一個檔名。 第一個以 '-' , '(' , ')' , ',' 或 '!' 這些字符起始的參數是表達式的開始; 在它之前的任何參數是要搜索的路徑,在它之後的任何參數都是表達式的餘下部分。 如果沒有路徑參數,預設用當前目錄。如果沒有表達式,預設表達式 用 '-print'. 當所有檔案都成功處理時 find 退出並返回狀態值0。如果發生錯誤則返回一個大於0的值。表達式 EXPRESSIONS¶
表達式是由 選項(選項總是影響所有的操作, 而不僅僅是一個指定的檔案的處 理, 而且總是返回真值), 測試(測試返回一個真值或一個假值),還有 動 作(動作有side effects, 返回一個真值或假值) 組成。它們都以運算符分開.忽 略運算符的時候,預設使用 -and 連接. 如果表達式沒有包含 -prune 以外的動 作,當表達式為真時會執行 -print 動作。選項 OPTIONS¶
所有的選項都總是返回真值,它們總會被執行,除非放在表達式中執行不到的地方。 因此,清楚起見,最好把它們放在表達式的開頭部分。- -daystart
 - 從當日起始時開始而不是從24小時之前,計算時間(for -amin, -atime, -cmin, -ctime, -mmin, and -mtime)。
 
- -depth
 - 先處理目錄的內容再處理目錄本身。
 
- -follow
 - 不檢索符號鏈接。隱含了 -noleaf。
 
- -help, --help
 - 列出 find 的命令行用法的概要,然後退出。
 
- -maxdepth levels
 - 進入命令行參數指定的目錄下層目錄時,最深不超過levels(一個非負整數) 層。`-maxdepth 0' 意味著只在命令行參數指定的目錄中執行測試和動作。
 
- -mindepth levels
 - 不在levels(一個非負整數)層之內執行任何測試和動作。`-mindepth 1'意 味著處理所有的檔案,除了命令行參數指定的目錄中的檔案。
 
- -mount
 - 不進入處於其它檔案系統之上的目錄。可以用-xdev代替,從而和一些其他版本的 find 相容。
 
- -noleaf
 - 不為“目錄中子目錄數量比硬連接數少2”這種假設做優化。這個選項在搜索那些不遵 循UNIX檔案系統鏈接約定的檔案系統時用,比如CD-ROM,MS-DOS檔案系統或AFS卷的 加載點。在普通的UNIX檔案系統中,每個目錄至少有兩個硬連接,它的名字和它 的 '.' 條目。另外,它的子目錄(假如有)還會各有一個 '..' 鏈接到它。在 find 檢索一個目錄時,發現子目錄數比它的連接數少二時,它就知道目錄中的其他條目 並非目錄(而是目錄樹中的葉(`leaf')節點)。除非需要檢索的是這個葉節點,否則 沒必要去處理它。這樣可以帶來很大的搜索速度提升。
 
- -version, --version
 - 列印find的版本號然後退出。
 
- -xdev
 - 不進入處於其他檔案系統之上的目錄。
 
測試 TESTS¶
數字參數可以這樣給出:- +n
 - 是比 n 大,
 
- -n
 - 是比 n 小,
 
- n
 - 正好是 n 。
 
- -amin n
 - 對檔案的最近一次訪問是在 n 分鐘之前。
 
- -anewer file
 - 對檔案的最近一次訪問比 file 修改時間要晚。如果命令行中 -follow 在 -anewer 之前,(也只有在這種情況下) -anewer 會受 -follow 的影響。
 
- -atime n
 - 對檔案的最近一次訪問是在 n*24 小時之前。
 
- -cmin n
 - 對檔案狀態的最近一次修改是在 n 分鐘之前。
 
- -cnewer file
 - 對檔案狀態的最近一次修改比 file 修改時間要晚。如果命令行中 -follow 在 -cnewer 之前,(也只有在這種情況下) -cnewer 會受 -follow 的影響。
 
- -ctime n
 - 對檔案狀態的最近一次修改是在 n*24 小時之前。
 
- -empty
 - 檔案是空的普通檔案或者空目錄。
 
- -false
 - 總是false。
 
- -fstype type
 - 檔案處於 type 類型的檔案系統之上。有效的檔案系統類型在不同版本的Unix中是不同的;一些Unix中的不完全的檔案系統類型列表是這樣:ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. 你可以用 -printf 加上 %F 指令來查看你的檔案系統的類型。
 
- -gid n
 - 檔案的數字形式的組ID是 n。
 
- -group gname
 - 檔案屬於 gname (也允許使用數字形式的組ID).
 
- -ilname pattern
 - 和 -lname 類似,但是匹配時是不區分大小寫的。
 
- -iname pattern
 - 和 -name 類似,但是匹配時是不區分大小寫的。例如,`fo*' and `F??' 模式與檔名 `Foo', `FOO', `foo', `fOo' 等等相匹配。
 
- -inum n
 - 檔案的 i 結點數是 n。
 
- -ipath pattern
 - 和 -path 類似,但是匹配時是不區分大小寫的。
 
- -iregex pattern
 - 和 -regex 類似, 但是匹配時是不區分大小寫的。
 
- -links n
 - 檔案有 n 個鏈接。
 
- -lname pattern
 - 檔案是一個與pattern 匹配的符號鏈接。元字符不會對`/' 或 `.' 做特殊處理。
 
- -mmin n
 - 對檔案數據的最近一次修改是在 n 分鐘之前。
 
- -mtime n
 - 對檔案數據的最近一次修改是在 n*24 小時之前。
 
- -name pattern
 - 基本的檔名(將路徑去掉了前面的目錄)與shell模式pattern相匹配。元字符(`*', `?', 還有`[]' ) 不會匹配檔名開頭的`.' 。使用 -prune 來略過一個目錄及其中的檔案。查看 -path 的描述中的範例。
 
- -newer file
 - 對檔案的最近一次修改比 file 修改時間要晚。如果命令行中 -follow 在 -newer 之前,(也只有在這種情況下) -newer 會受 -follow 的影響。
 
- -nouser
 - 沒有符合檔案的數字形式的使用者ID的使用者。
 
- -nogroup
 - 沒有符合檔案的數字形式的組ID的組。
 
- -path pattern
 - 檔名與shell模式pattern相匹配。元字符不會對`/'
      或 `.'
      做特殊處理。因此,例如:
    
find . -path './sr*sc'
如果存在 './src/misc' 的話,會將它列印出來。想要忽略一個完整的目錄樹,應當使用-prune 而不是檢查目錄樹中所有的檔案。例如:要跳過 'src/emacs' 目錄和其中所有的檔案和子目錄,把其他找到的檔案列印出來,應當這樣:
find . -path './src/emacs' -prune -o -print
 
- -perm mode
 - 檔案的權限位恰好是 mode (八進制或符號)。 Symbolic modes use mode 0 as a point of departure.
 
- -perm -mode
 - 所有的權限位 mode 都被設置了的檔案。
 
- -perm +mode
 - 任何權限位 mode 被設置了的檔案。
 
- -regex pattern
 - 檔名與正則表達式 pattern 匹配。這是對整個路徑的匹配,不是搜索檔案。例如,要匹配名為`./fubar3' 的檔案,可以使用正則表達式 `.*bar.' 或者 `.*b.*3',但是不能用`b.*r3'。
 
- -size n[bckw]
 - 檔案使用了 n 單位個存儲單元。預設的單位是512字節的塊,也可以用 n後面加上 `b' 來指定這個值。其他的單位是字節,如果在 n 後面加上 `c' ;千字節(kB),如果在 n 後面加上`k' ;兩字節的字,如果在 n 後面加上 `w' 。大小不會計入 indirect blocks,但是會計入沒有真正分配空間的疏鬆檔案中的塊。
 
- -true
 - 總是true。
 
- -type c
 - 檔案是 c 類型的。類型可取值如下:
 
- b
 - 特殊塊檔案(緩沖的)
 
- c
 - 特殊字符檔案(不緩沖)
 
- d
 - 目錄
 
- p
 - 命名管道 (FIFO)
 
- f
 - 普通檔案
 
- l
 - 符號鏈接
 
- s
 - 套接字
 
- D
 - 門 (Solaris 特有)
 
- -uid n
 - 檔案的數字形式的使用者ID是 n 。
 
- -used n
 - 檔案最後一次存取是在最後一次修改它的狀態的 n 天之後。
 
- -user uname
 - 檔案的所有者是 uname (也可以使用數字形式的使用者ID).
 
- -xtype c
 - 和 -type 相同,除非檔案是一個符號鏈接。對於符號鏈接:如果沒有給出 -follow ,如果檔案是一個指向 c 類型檔案的鏈接,那麼返回true;如果給出了 -follow ,如果 c 是 `l' 那麼返回true。換句話說,對於符號鏈接,-xtype 檢查那些 -type 不檢查的檔案。
 
動作 ACTIONS¶
- -exec command ;
 - 執行 command;如果命令返回狀態值0,那麼 exec 返回true。所有 find 其餘的命令行參數將作為提供給命令的參數,直到遇到一個由 `;' 組成的參數為止。命令的參數中,字符串 `{}' 將以正在處理的檔名替換。所有的 `{}' 都會被替換,不僅是在單獨的一個參數中。有些版本的 find 不是這樣做的。 這些參數可能需要用 `\' 來escape 或者用括號括住,防止它們被shell展開。命令是從起始目錄執行的。
 
- -fls file
 - 返回true;類似 -ls 但是像 -fprint 那樣寫入 file。
 
- -fprint file
 - 返回true;將檔案全名列印到檔案 file 中。如果運行 find 時 file 不存在,那麼它將被創建。如果它存在,它將被覆蓋。檔名``/dev/stdout'' 和``/dev/stderr'' 會作特殊處理;它們分別指的是標準輸出和標準錯誤輸出。
 
- -fprint0 file
 - 返回true;類似 -print0 但是像 -fprint 那樣寫入 file。
 
- -fprintf file format
 - 返回true;類似 -printf 但是像 -fprint 那樣寫入 file。
 
- -ok command ;
 - 類似 -exec 但是會先向使用者詢問 (在標準輸入); 如果回應不是以 `y' 或 `Y' 起始則不會運行 command 而是返回false。
 
- 返回true;在標準輸出列印檔案全名,然後是一個換行符。
 
- -print0
 - 返回true;在標準輸出列印檔案全名,然後是一個null字符。這樣可以使得處理 find 的輸出的程式可以正確地理解帶有換行符的檔名。
 
- -printf format
 - 返回true;在標準輸出列印 format , 解釋 `\' escape 還有 `%' 指令。字段寬度和精度可以像C函數 `printf' 那樣來指定。與 -print 不同的是, -printf 在字符串末端不會添加一個新行。可用的escape 和指令如下:
 
- \a
 - 警告鈴聲
 
- \b
 - 回退
 
- \c
 - 立即停止以當前格式輸出,刷新輸出設備。
 
- \f
 - 表格結束
 
- \n
 - 新行
 
- \r
 - 回車
 
- \t
 - 水平tab
 
- \v
 - 豎直tab
 
- \\
 - 輸出自身`\'
 
- \NNN
 - ASCII編碼是NNN(八進制)的字符
 
- %%
 - 輸出自身`%'
 
- %a
 - 檔案最後一次存取的時間。格式是C函數 `ctime' 返回值的格式。
 
- %Ak
 - 檔案最後一次存取的時間。格式以 k 指定,可以是 `@' 或者是C函數 `strftime' 的指令格式。下面列出了 k 可用的值;有一些並不是在所有系統上都可用,因為不同系統中 `strftime' 也不同。
 
- @
 - 從 Jan. 1, 1970, 00:00 GMT 起的秒數
 
- H
 - 小時 (00..23)
 
- I
 - 小時 (01..12)
 
- k
 - 小時 ( 0..23)
 
- l
 - 小時 ( 1..12)
 
- M
 - 分鐘 (00..59)
 
- p
 - 本地的 AM 或者 PM
 
- r
 - 12小時格式的時間 (hh:mm:ss [AP]M)
 
- S
 - 秒 (00..61)
 
- T
 - 24小時格式的時間 (hh:mm:ss)
 
- X
 - 本地的時間表示方法 (H:M:S)
 
- Z
 - 時區(例如,EDT),如果不能決定時區就是空
 
- a
 - 本地一星期中每天的名稱的縮寫(Sun..Sat)
 
- A
 - 本地一星期中每天的全名,可變長度 (Sunday..Saturday)
 
- b
 - 本地每月的名稱的縮寫 (Jan..Dec)
 
- B
 - 本地每月的全名,可變長度 (January..December)
 
- c
 - 本地的日期和時間表示 (Sat Nov 04 12:02:33 EST 1989)
 
- d
 - 一個月當中的日子 (01..31)
 
- D
 - 日期 (mm/dd/yy)
 
- h
 - 與 b 相同
 
- j
 - 一年當中的日子 (001..366)
 
- m
 - 月份 (01..12)
 
- U
 - 以星期日作為每周起始,一年當中的星期 (00..53)
 
- w
 - 一星期當中的日子 (0..6)
 
- W
 - 以星期一當作每周起始,一年當中的星期 (00..53)
 
- x
 - 本地的日期表示 (mm/dd/yy)
 
- y
 - 年份的最後兩位 (00..99)
 
- Y
 - 年份 (1970...)
 
- %b
 - 檔案大小,以512字節的塊為單位 (四舍五入)。
 
- %c
 - 檔案狀態最後一次修改的時間。格式是C函數 `ctime' 返回值的格式。
 
- %Ck
 - 檔案狀態最後一次修改的時間。格式以 k 指定,類似於%A。
 
- %d
 - 檔案在目錄樹中的深度;0 意味著檔案是一個命令行參數。
 
- %f
 - 去掉了前面的目錄的檔名 (只剩下最後的成分)。
 
- %F
 - 檔案所在檔案系統的類型;這個值可以為 -fstype 所用。
 
- %g
 - 檔案的組名,如果組沒有名稱就是數字形式的組ID。
 
- %G
 - 檔案的數字形式的組ID。
 
- %h
 - 檔名的前面的目錄部分 (僅除去最後的成分)。
 
- %H
 - 據以找到了檔案的命令行參數。
 
- %i
 - 檔案的 i 結點號(16進制)。
 
- %k
 - 檔案大小,以1kB 的塊為單位 (四舍五入)。
 
- %l
 - 符號鏈接的目標 (如果檔案不是一個符號鏈接,那麼結果是空字符串)。
 
- %m
 - 檔案的權限位 (8進制)。
 
- %n
 - 檔案的硬連接數。
 
- %p
 - 檔名。
 
- %P
 - 檔名,去掉了據以找到了檔案的命令行參數的名稱部分。
 
- %s
 - 檔案大小,以字節為單位。
 
- %t
 - 檔案最後一次修改的時間。格式是C函數 `ctime' 返回值的格式。
 
- %Tk
 - 檔案最後一次修改的時間。格式以 k 指定,類似於%A。
 
- %u
 - 檔案的使用者名,如果使用者沒有名稱就是數字形式的使用者ID。
 
- %U
 - 檔案的數字形式的使用者ID。
 
- -prune
 - 如果沒有給出 -depth
      則返回 true;
      不進入當前目錄。
    如果給出了 -depth 則返回false; 沒有效果。
 
- -ls
 - 返回true;以 `ls -dils' 格式在標準輸出列出檔案。塊以1kB 字節為單位計數,除非設置了環境變量POSIXLY_CORRECT,那樣的話會使用 512字節的塊。
 
運算符 OPERATORS¶
以優先級高低順序排列:- ( expr )
 - 強制為優先
 
- ! expr
 - 如果 expr 是false則返回true
 
- -not expr
 - 與 ! expr 相同
 
- expr1 expr2
 - 與 (隱含的預設運算符);如果 expr1 為false則不會執行 expr2
 
- expr1 -a expr2
 - 與 expr1 expr2 相同
 
- expr1 -and expr2
 - 與 expr1 expr2 相同
 
- expr1 -o expr2
 - 或;如果 expr1 為true 則不會執行 expr2
 
- expr1 -or expr2
 - 與 expr1 -o expr2 相同
 
- expr1 , expr2
 - 列表;expr1 和 expr2 都會被執行。 expr1 的值被忽略,列表的值是 expr2的值