Linux下find命令在目錄結構中搜索文件,並執行指定的操作。Linux下find命令提供了很多的查找條件,功能非常強大。
1.命令格式:
find pathname -options [-print -exec -ok ...]
2.命令功能:
用於在文件樹中查找文件,並作出相應的處理(可能訪問磁盤)
3.命令參數:
pathname: find命令所查找的目錄路徑,例如:用.來表示當前目錄,用/來表示系統目錄
-print: find命令將匹配的文件輸出到標准輸出。
-exec: find命令將匹配的的文件執行該參數所給出的shell命令,相應命令的形式為'command' { } \;,注意{ }和\;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
options常用的有如下選項:
-name: 按照名字查找
-perm: 按照文件權限來查找文件
-prune: 不在當前指定的目錄下查找。
-user: 按照文件屬主來查找文件
-group: 按照文件多數的組來查找文件
-mtime -n +n :按照文件的更改時間來查找文件,-n表示文件更改時間距現在n天以內, +n表示文件更改時間距現在n天以前。
-nogroup: 查找無有效所屬組的文件,即該文件所屬組在etc/group中不存在
-nouser : 查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在
-type : 查找某一類型的文件
下面通過一些簡單的例子來介紹find的常規用法
1.按名字查找
1)查找文件名為test.c的文件
[admin@bogon ~]$ find -name test.c
./test.c
[admin@bogon ~]$
2)查找文件名包含 test 的文件
[admin@bogon ~]$ find -name 'test'
./test
./BIT/test
3)在$HOME目錄及其子目錄中,查找所有文件
admin@bogon ~]$ find ~ -name '*' -print
4)具有條件的查找
-a 與條件
-o 或條件
-not 非條件(此參數的功能類似於否定參數‘!’)
1)
[admin@bogon ~]$ find -name "t*" -a -name "*.c" //查找以t為開頭,以.c為結尾的文件
./test.c
[admin@bogon ~]$
2)
[admin@bogon ~]$ find -name "t*" -o -name "*.c" //查找以t開頭或者以.c為結尾的文件
./test.c
./test
./.gnupg/trustdb.gpg
./BIT/test
./BIT/test-bak
./.gconf/apps/nautilus/desktop-metadata/trash
./.gconf/apps/panel/applets/trash_applet
[admin@bogon ~]$
3)用!來表示找到不以.c為結尾的文件
[admin@bogon ~]$ find ./ ! -name '*.c' -print
4)找到不以.c為結尾的文件
[admin@bogon ~]$ find ./ not -name '*.c' -print
./test.c
find: `not': No such file or directory
[admin@bogon ~]$ find -name "t*" -not -name "*.c"
./test
./.gnupg/trustdb.gpg
./BIT/test
./BIT/test-bak
./.gconf/apps/nautilus/desktop-metadata/trash
./.gconf/apps/panel/applets/trash_applet
[admin@bogon ~]$
2.根據文件類型搜索:
普通文件 f
符號文件 l
目錄 d
字符設備 c
塊設備 b
套接字 s
管道文件 p
3.根據文件大小
-size
通過-size選項可以通過文件大小查找文件。
-size n:[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節計。
b——塊(512字節); c——字節; w——字(2字節);
k——千字節 ; M——兆字節; G——吉字節。
[admin@bogon ~]$ find -size +18k 查找比18k大的文件
[admin@bogon ~]$ find -size -18k 查找比18k小的文件
4.按照文件深度進行查找
-maxdepth
-mindepth
用來限定搜索指定目錄的深度。
1)在root目錄以及子目錄下查找文件名為test的文件
2) find -maxdepth 2 -name test 在root目錄以及深度為1的子目錄中查找文件名為test的文件
3)find -mindepth 1 -maxdepth -name test 在深度為0的子目錄以及深度為5的子目錄中查找文件
名為test的文件
5.根據文件權限來查找
-perm
find -perm 664
6.按照文件時間進行查找
linux文件系統中的每個文件都有三種時間戳:
1. 訪問時間(atime——access time):就是上次訪問這個文件的時間。
2. 改變時間(ctime——change time):就是文件的inode改變的時間(什麼是inode?)當你往一個文件中添加數據或者刪除數據的時候,修改文件所有者的時候,鏈接改變的時候,文件的ctime就會發生改變。
3. 修改時間(mtime——modification time):就是文件的內容上一次發生改變的時候的時間。
1)
[admin@bogon ~]$ find -type f -atime -2
2)[admin@bogon ~]$ find -atime +10
3)find ./ -newer test.c 查找比test.c還要新的文件