由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有網路檔案系統(nfs),find命令在該檔案系統中同樣有效,只你具有相應的許可權。
在執行乙個非常消耗資源的find命令時,很多人都傾向於把它放在後台執行,因為遍歷乙個大的檔案系統可能會花費很長的時間(這裡是指30g位元組以上的檔案系統)。
find pathname -options [-print -exec -ok]
find命令選項options:
引數說明
pathname
find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。
find命令將匹配的檔案輸出到標準輸出。
-exec
find命令對匹配的檔案執行該引數所給出的s h e l l命令。相應命令的形式為' command' {} \;,注意和\;之間的空格。
-ok和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每乙個命令之前,都會給出提示,讓使用者來確定是否執行。
-name
按照檔名查詢檔案。
-perm
按照檔案許可權來查詢檔案。
-prune
使用這一選項可以使find命令不在當前指定的目錄中查詢,如果同時使用-depth選項,那麼-prune將被find命令忽略。
-user
按照檔案屬主來查詢檔案。
-group
按照檔案所屬的組來查詢檔案。
-mtime
-mtime -n +n
按照檔案的更改時間來查詢檔案, - n表示檔案更改時間距現在n天以內,+ n表示檔案更改時間距現在n天以前。find命令還有-atime和-ctime選項,但它們都和-mtime選項。
-nogroup
查詢無有效所屬組的檔案,即該檔案所屬的組在/etc/groups中不存在。
-nouser
查詢無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。
-newer
-newer file1 ! file2
查詢更改時間比檔案file1新但比檔案file2舊的檔案。
-type
查詢某一型別的檔案。
b - 塊裝置檔案。
d - 目錄。
c - 字元裝置檔案。
p - 管道檔案。
l - 符號鏈結檔案。
f - 普通檔案。
-size n[c]
查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。
-depth
在查詢檔案時,首先查詢當前目錄中的檔案,然後再在其子目錄中查詢。
-fstype
查詢位於某一型別檔案系統中的檔案,這些檔案系統型別通常可以在配置檔案/etc/fstab中找到,該配置檔案中包含了本系統中有關檔案系統的資訊。
-mount
在查詢檔案時不跨越檔案系統mount點。
-follow
如果find命令遇到符號鏈結檔案,就跟蹤至鏈結所指向的檔案。
-cpio
對匹配的檔案使用cpio命令,將這些檔案備份到磁帶裝置中。
1.1.3.1 name選項
檔名選項是find命令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用。
可以使用某種檔名模式來匹配檔案,記住要用引號將檔名模式引起來。
不管當前路徑是什麼,如果想要在自己的根目錄$home中查詢檔案名符合*.txt的檔案,使用~作為pathname引數,波浪號~代表了你的$home目錄。
$ find ~ -name "*.txt" -print
想要在當前目錄及子目錄中查詢所有的*.txt檔案,可以用:
$ find . -name "*.txt" –print
想要的當前目錄及子目錄中查詢檔案名以乙個大寫字母開頭的檔案,可以用:
$ find . -name "[a-z]*" –print
想要在/etc目錄中查詢檔案名以host開頭的檔案,可以用:
$ find /etc -name "host*" -print
想要查詢$home目錄中的檔案,可以用:
$ find ~ -name "*" -print 或find . -print
要想讓系統高負荷執行,就從根目錄開始查詢所有的檔案。
$ find / -name "*" -print
如果想在當前目錄查詢檔案名以兩個小寫字母開頭,跟著是兩個數字,最後是*.txt的檔案,下面的命令就能夠返回名為ax37.txt的檔案:
$find . -name "[a-z][a-z][0--9][0--9].txt" -print
1.1.3.2 perm選項
按照檔案許可權模式用-perm選項。
按檔案許可權模式來查詢檔案的話。最好使用八進位制的許可權表示法。
如在當前目錄下查詢檔案許可權位為755的檔案,即檔案屬主可以讀、寫、執行,其他使用者可以讀、執行的檔案,可以用:
$ find . -perm 755 -print
還有一種表達方法:在八進位制數字前面要加乙個橫槓-,表示都匹配,如-007就相當於777,-006相當於666。
# ls -l
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
1.1.3.3 prune選項
如果在查詢檔案時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查詢的檔案,那麼可以使用-prune選項來指出需要忽略的目錄。在使用-prune選項時要當心,因為如果你同時使用了-depth選項,那麼-prune選項就會被find命令忽略。
-perm選項中,我的解析還有一種表達方法:在八進位制數字前面要加乙個橫槓-,表示都匹配,如-007就相當於777,-006相當於666。
使用find查詢檔案的時候怎麼避開某個檔案目錄?
比如要在/usr/sam目錄下查詢不在dir1子目錄之內的所有檔案
$find /usr/sam -path "/usr/sam/dir1" -prune -o -print
find [path ..] [expression] 在路徑列表的後面的是表示式
-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o -print 的簡寫表示式按順序求值, -a 和 -o 都是短路求值,與 shell 的 && 和 || 類似。如果 -path "/usr/sam" 為真,則求值 -prune , -prune 返回真,與邏輯表示式為真;否則不求值 -prune ,與邏輯表示式為假。 如果 -path "/usr/sam" -a -prune 為假,則求值 -print ,-print 返回真,或邏輯表示式為真;否則不求值 -print,或邏輯表示式為真。
這個表示式組合特例可以用偽碼寫為
if -path "/usr/sam" then
-prune
else
iptable 詳解 iptable命令詳解1
p protocal protocol 協議 j jump target i in inte ce name 入口 o out inte ce name 出口 f,fragment 分片 指定 p tcp時 source port port port 原埠 也作 sport destionation...
UNIX crontab命令詳解
crontab命令的功能是在一定的時間間隔排程一些命令的執行。在 etc目錄下有乙個crontab檔案,這裡存放有系統執行的一些排程程式。每個使用者可以建立自己的排程crontab。crontab命令有三種形式的命令列結構 crontab u user file crontab u user e l...
mount命令詳解
名稱 mount 使用許可權 系統管理者或 etc fstab中允許的使用者 使用方式 mount hv mount a ffnrsvw t vfstype mount fnrsvw o options device dir mount fnrsvw t vfstype o options devi...