find 命令的一般形式為
find pathname -options [-PRint -exec -ok]
讓我們來看看該命令的參數:
pathname find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。
-print find命令將匹配的文件輸出到標準輸出。
-exec find命令對匹配的文件執行該參數所給出的s h e l l命令。相應命令的形式為' c o m m -and' {} /;,注意{ }和/;之間的空格。
-ok 和- e x e c的作用相同,只不過以一種更為安全的模式來執行該參數所給出的s h e l l命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
-name | 按照文件名查找文件。 |
-perm | 按照文件權限來查找文件。 |
-prune | 使用這一選項可以使f i n d命令不在當前指定的目錄中查找,如果同時使用了- d e p t h選項,那么- p r u n e選項將被f i n d命令忽略。 |
-user | 按照文件屬主來查找文件。 |
-group | 按照文件所屬的組來查找文件。 |
-mtime -n +n | 按照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前。 |
-newer file1 ! File2 | 查找更改時間比文件f i l e 1新但比文件f i l e 2舊的文件。 |
-nogroup | 查找無有效所屬組的文件,即該文件所屬的組在/ e t c / g r o u p s中不存在。 |
-nouser | 查找無有效屬主的文件,即該文件的屬主在/ e t c / p a s s w d中不存在。 |
-type | 查找某一類型的文件,諸如: |
b - 塊設備文件。 | |
d - 目錄。 | |
c - 字符設備文件。 | |
p - 管道文件。 | |
l - 符號鏈接文件。 | |
f - 普通文件。 | |
-size n[c] | 查找文件長度為n塊的文件,帶有c時表示文件長度以字節計。 |
-depth | 在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。 |
-fstype | 查找位于某一類型文件系統中的文件,這些文件系統類型通常可以在配置文件/ e t c / f s t a b中找到,該配置文件中包含了本系統中有關文件系統的信息。 |
-mount | 在查找文件時不跨越文件系統m o u n t點。 |
-follow | 如果f i n d命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。 |
-cpio | 對匹配的文件使用c p i o命令,將這些文件備份到磁帶設備中。 |
列出當前目錄下一天以內的文件
find . -mtime -1 -print
列出當前目錄下3天以前的文件
find . -mtime +3 –print
查看當前目錄下比orcl1_mmon_4503.trc新,但比orcl1_rcbg_6676.trc舊的文件。
find . -newer orcl1_mmon_4503.trc ! -newer orcl1_rcbg_6676.trc -exec ls -l {} /;
$ touch 1.txt
$ touch 2.txt
$ find . -newer 1.txt
.
./2.txt
查看大小恰好為1個塊大小的文件
$ find . -size 1 -print
./1.txt
查看恰好為2個字節的文件(默認一個英文字母占兩個字節)
$ find . -size 2c -print
./1.txt
查看超過一個塊大小的文件
find . –size +1 -print
首先查找所有的文件,然后再進入子目錄查尋
$ find . -name "awr*" -depth -print
find: warning: you have specified the -depth option after a non-option argument -name, but options are not positional (-depth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
./awrrpt_rac_45_53.html
查看當前目錄下的普通文件(不包含目錄,但會遞歸查找子目錄下的所有文件)
find . –type f -exec ls -l {} /;
刪除日志目錄下5天前的普通文件(子目錄不會被刪除)
find log –type f –mtime +5 –exec rm {} /;
刪除當前目錄log下及其子目錄下所有普通文件(子目錄不會被刪除)
find log -type f -exec rm -rf {} /;
ok操作需要進行確認
$ find . -type f -ok rm -rf {} /;
< rm ... ./b > ? y
< rm ... ./a > ? y
查看指定文件中指定的相關內容。首先匹配所有文件名為“ passwd *”的文件,例如passwd、passwd . old、passwd . bak,然后執行grep命令看看在這些文件中是否存在一個admin用戶。
find /etc/ -name "passwd*" -exec grep "admin" {} /;
admin:x:903:503::/home/admin:/bin/bash
查看Oracle日志中的錯誤信息
[oracle@r7 trace]$ find . -name "orcl*" -exec grep "ORA-" {} /;
F i n d命令把匹配到的文件傳遞給x a rg s命令,而x a rg s命令每次只獲取一部分文件而不是全部,不像- e x e c選項那樣。這樣它可以先處理
最先獲取的一部分文件,然后是下一批,并如此繼續下去。在有些系統中,使用- e x e c選項會為處理每一個匹配到的文件而發起一個相應的進程,并非將匹配到的文件全部作為參數一次執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;而使用x a rg s命令則只有一個進程。另外,在使用x a rg s命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參數來確定。
下面的例子在整個系統中查找內存信息轉儲文件(core dump) ,然后把結果保存到/tmp/core.log 文件中:
$ find . -name "core" -print | xargs echo "" >/tmp/core.log
下面的例子在/ a p p s / a u d i t目錄下查找所有用戶具有讀、寫和執行權限的文件,并收回相應的寫權限:
$ find /apps/audit -perm -7 -print | xargs chmod o-w
在下面的例子中,我們用g r e p命令在所有的普通文件中搜索d e v i c e這個詞:
$ find / -type f -print | xargs grep "device"
在下面的例子中,我們用g r e p命令在當前目錄下的所有普通文件中搜索D B O這個詞:
$ find . -name */-type f -print | xargs grep "DBO"
注意,在上面的例子中, /用來取消f i n d命令中的*在s h e l l中的特殊含義。
新聞熱點
疑難解答