find - 在目錄層次中尋找文件
參數說明:
-daystart
從今天也不從24小時之前開始計量時間(對 -amin,
-atime, -cmin, -ctime, -mmin, 和-mtime有效)。
-depth
先搜索目錄的內容再搜索目錄本身。
-follow
不檢索符號鏈接。意即 -noleaf。
-help, --help
列出find的命令行用法的概要,然後返回
-maxdepth levels
在命令行下目錄的最大深度級別(非負整數),'-maxdepth 0'
意味著只在命令行參數中應用檢測和事件。
-mindepth levels
小於指定數字(非負整數)的深度級別的目錄層次將不應用檢
測和事件。'-mindepth 1'意味著除了當前的命令行參數外
將搜索所有的文件。
-mount
在其它文件系統中不進入目錄。
-noleaf
不優化假如某一個目錄裡包含少於兩個以下的子目錄。這個選
項在那些不遵循UNIX文件系統鏈界約定的文件系統中用,像
CD-ROM,MS-DOS或AFS卷加載點上。在UNIX文件系統中,每個
目錄有至少兩個硬鏈接,它的名字和'.'。它的子目錄(假如有)
各自有一個'..'鏈接到它本身。在FIND檢索一個目錄時,在統
計其子目錄少於兩個,意味著將不需要在進行下去了。只需要
檢索一下這個目錄名;這在檢索速度上是個有意義的提高。
-version, --version
顯示FIND的版本號,終止程序。
-xdev 在其它文件系統中不進入目錄。
說明:
用下邊的格式可以指定數字參數
+n 比n大。
-n 比n小。
n 恰好是n。
-amin n
文件最後一次訪問是在n分鐘前。
-anewer file
文件最後訪問時間比指定的file修改時間更晚。 -anewer會
受到-follow的影響當在命令行中-follow在-anewer之前時。
-atime n
文件最後一次訪問是n*24小時前。
-cmin n
文件的狀態的改變是在n分鐘前。
-cnewer file
文件狀態的改變比指定的file狀態的改變時間更晚。-cnewer
會受到-follow的影響當命令行中-follow在-cnewer之前時。
-ctime n
文件狀態的改變時間是在n*24小時前。
-empty 文件是空的,它是一個正規的文件或目錄。
-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(允許數字型的gname).
-ilname pattern
同-lname, 但是匹配是大小些不區分的.
-iname pattern
同-name,但是匹配是大小些不區分的。舉個例子,這個通配符
'fo*'和'f??'匹配文件名'Foo', 'FOO', 'foo', 'fOo',等
等。
-inum n
文件的i結點數是n.
-ipath pattern
同 -path, 但是匹配大小寫不區分。
-iregex pattern
同 -regex, 但是匹配大小寫不區分.
-links n
文件有n個鏈結。
-lname pattern
文件是個符號鏈結內容匹配shell通配符pattern。元字符
'/'或'.'不能區別對待。
-mmin n
文件的數據最後一次被編輯是在n分鐘前.
-mtime n
文件的數據最後一次被編輯是在n*24小時前.
-name pattern
基本的文件名(起始的目錄已經檢測過了)匹配shell通配符
pattern.元字符('*', '?', 和'[]')不能匹配一個以'.'
開頭的文件名。忽略在它下邊的目錄或文件,用-prune;參看
-path描述中的例子。
-newer file
文件最後編輯時間比指定的file晚
-newer會受到-follow的影響當在命令行中-follow在-newer
之前時。
-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(八進制或符號).符號模式用
模式0做為開始。
-perm -mode
文件的所有訪問權限位mode都設了。
-perm +mode
文件的一些訪問權限位mode設了。
-regex pattern
文件匹配規則的表達式通配符。這是一個在整個路徑中的
匹配,而不是一個檢索。舉個例子,匹配一個'./fubar3'
文件名的文件,你應該用規則的表達式'.*bar.'或'.*b.*3',
而不是'b.*r3'.
-size n[bckw]
文件占用n個單元空間。在缺省時或n後邊跟著字符b時,這個
單元是512字節的塊,n後邊跟著c是字節,n後邊跟著k是千字節,
n後邊跟著w是兩個字節的詞.文件大小不能計算間接的塊,但是
能計算很少的沒能實際分配大小的文件。
-true 總是真
-type c
文件是類型c:
b 塊(緩沖)設備.
c 字符設備.
d 目錄.
p 有名管道(FIFO).
f 規則文件.
l 符號鏈結.
s 插座.
-uid n 文件的數字型用戶ID是n.
-used n
文件的最後訪問時間是在它的狀態改變時間的n天前.
-user uname
文件是屬於名為uname(數字型ID也可)的用戶。
-xtype c
這一項是和-type相同的除非文件是一個符號鏈結。
若是符號鏈結:假如 -follow 沒有給出,若這個文件鏈結
的是類型為c的文件,則返回真;假如給了-follow選項,若c
為'l',則返回真.對於符號鏈結, -xtype檢測鏈結的文件類
型,-type不做這樣的檢測。
事件
-exec command ;
執行命令;返回的狀態值為零則為真。所有在這之後的參數
都是command的參數,直到遇到';'.字符串'{}'將被當前的
文件名代替,作為當前命令的參數,並不是象一些版本FIND
一樣是個單獨存在的一個參數,這些語句應該被轉義(用'\')
或被引用,以此來保護他們被SHELL展開。這個命令將在起始
目錄被執行。
-fls file
值為真;同 -ls 但像 -fprint一樣將輸出寫向文件file
-fprint file
值為真;輸出整個文件名到文件file中.當find運行時file不
存在,它將被建立;若存在,原來的文件內容將被刪掉。也可以
用名為"/dev/stdout"和"/dev/stderr"的文件,它們分別指
的時是標准輸出和標准錯誤。
-fprint0 file
值為真;同 -printf 但是將像 -fprint 一樣將輸出寫像文
件file.
-ok command
同 -exec但是先問用戶(在標准輸入);假如應答不是以'y'或
'Y'開頭,將不執行command,返回假。
-print 值為真;在標准輸出上輸出整個文件名,並加一個新行。
-print0
值為真;在標准輸出上輸出整個文件名,並加一個空字符。這
將允許
6
其它程序能正確的處理在FIND輸出中包含新行的文件名。
-printf format
值為真。通過解釋轉義字符'\'和指示字符'%',格式化輸出
到標准輸出上.空間寬度和精度能像c函數'printf'一樣被
指定。不像 -print, -printf不能在字符串的末尾自動加
一個新行。這些轉義和指示字符是:
\a 鳴聲.
\b 退格鍵.
\c 馬上停止格式輸出,輸出到標准輸出上。
\f 換頁符.
\n 行符.
\r 回車符.
\t 水平制表符.
\v 豎直制表符.
\ 反斜線.
一個'\'字符後跟著其它字符將被視為普通字符,它們都將
被輸出。
%% 符號'%'.
%a 在格式輸出中通過調用c函數'ctime'返回文件的
最後訪問時間。
%AK 用K指定的格式輸出文件的最後訪問時間。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 本地的上午或下午.
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 星期的哪一天
W 當年的星期數,用星期一做為一星期的第一天 (00..53).
x 本地的日期表示法 (mm/dd/yy).
y 當年的最後兩位數 (00..99).
Y 年份 (1970...).
%b 用512字節的塊計算的文件的大小(上捨入)。
%c 用C函數'ctime'返回的文件狀態的最後改變時間。
%Ck 被k指定的文件狀態的最後改變時間,k與%A後的k相同.
%d 文件在目錄樹中的深度;0意味著文件在命令行參數中.
%f 不帶目錄的文件名(只有最後的元素).
%F 這個文件所在的文件系統類型名;這個值能被 -fstype用。
%g 文件的組名,若組無名則是組ID.
%G 文件的數字組ID.
%h 文件的主目錄 (除了最後的元素).
%H 命令行參數若文件在命令行參數中找到.
%i 文件的i節點數 (10進制格式).
%k 用1K字節的塊計算文件的大小(上捨入)。
%l 符號鏈接的目標(假如文件不是一個符號鏈接則返回一個
空字符串).
%m 文件的訪問權限位 (八進制)
%n 文件的硬鏈接數
%p 文件名.
%P 用在命令行參數之下發現的文件名代替文件名.
%s 用字節計算的文件大小.
%t 用C函數'ctime'返回的文件的最後編輯時間。
%Tk 被k指定格式的文件的最後編輯時間,k與%A後的k相同.
%u 文件的用戶名,若沒有則輸出用戶數字ID.
%U 文件的數字ID.
字符'%'後跟著另外的字符將被丟棄(但是其它的字符將輸出).
-prune 假如 -depth 沒指定,值為真;不進入當前的目錄。
若 -depth 給定,值為假;沒作用.
-ls 值為真;用 'ls -dils'格式在標准輸出中列出當前目錄的文件。
塊記數單位是1k字節,除非 設定了POSIXLY_CORRECT環境變量,
將用512字節作為單位。
操作符
列出優先級順序
( expr )
強制優先.
! expr 假如expr為假則為真.
-not expr
同 ! expr.
expr1 expr2
和操作(默認); 假如expr1值是假expr2不能鑒定。
expr1 -a expr2
同 expr1 expr2.
expr1 -o expr2
與操作;假如expr1值是真expr2不能鑒定。
expr1 -or expr2
同 expr1 -o expr2.