Linux下find命令在目錄結構中搜索文件,並執行指定的操作。Linux下find 命令提供了相當多的查找條件,功能很強大。由於find具有強大的功能,所以它 的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有 網絡文件系統( NFS),find命令在該文件系統中同樣有效,只你具有相應的權限 。 在運行一個非常消耗資源的find命令時,很多人都傾向於把它放在後台執行 ,因為遍歷一個大的文件系統可能會花費很長的時間(這裡是指30G字節以上的文 件系統)。
1.命令格式:
find pathname -options [-print -exec -ok ...]
2.命令功能:
用於在文件樹種查找文件,並作出相應 的處理
3.命令參數:
pathname: find命令所查找的目錄路徑。 例如用.來表示當前目錄,用/來表示系統根目錄。
-print: find命令將 匹配的文件輸出到標准輸出。
-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的 形式為'command' { } \;,注意{ }和\;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給 出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執 行。
4.命令選項:
-name 按照文件名查找文件。
-perm 按照文件權限來查找文件。
-prune 使用這 一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項, 那麼-prune將被find命令忽略。
-user 按照文件屬主來查找文件 。
-group 按照文件所屬的組來查找文件。
-mtime -n +n 按照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內 ,+ n表示文件更改時間距現在n天以前。find命令還有-atime和-ctime 選項, 但它們都和-m time選項。
-nogroup 查找無有效所屬組的文件, 即該文件所屬的組在/etc/groups中不存在。
-nouser 查找無有 效屬主的文件,即該文件的屬主在/etc/passwd中不存在。
-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命令, 將這些文件備份到磁帶設備中。
另外,下面三個的區別:
-amin n 查找系統中最後N分鐘訪問的文件
-atime n 查找系統中最 後n*24小時訪問的文件
-cmin n 查找系統中最後N分鐘被改變文 件狀態的文件
-ctime n 查找系統中最後n*24小時被改變文件狀態 的文件
-mmin n 查找系統中最後N分鐘被改變文件數據的文件
-mtime n 查找系統中最後n*24小時被改變文件數據的文件
5.使用實例:
實例1:查找指定時間內修改過的文件
命 令:
find -atime -2
輸 出:
[root@peidachang ~]# find -atime - 2
.
./logs/monitor
./.bashrc
./.bash_profile
./.bash_history
說明:
超找48小時內修改過的文件
實例2:根據關鍵字查找
命令:
find . -name "*.log"
輸出:
[root@localhost test]# find . - name "*.log"
./log_link.log
./log2014.log
./tes t4/log3-2.log
./test4/log3-3.log
./test4/log3- 1.log
./log2013.log
./log2012.log
./log.log
./ test5/log5-2.log
./test5/log5- 3.log
./test5/log.log
./test5/log5- 1.log
./test5/test3/log3-2.log
./test5/test3/log3- 3.log
./test5/test3/log3-1.log
./test3/log3- 2.log
./test3/log3-3.log
./test3/log3-1.log
說明:
在當前目錄查找 以.log結尾的文件。 ". "代表當前目錄
實例3:按照目錄或文件的權限來查找文件
命令:
find /opt/soft/test/ -perm 777
輸出:
[root@localhost test]# find /opt/soft/test/ -perm 777
/opt/soft/test/log_link.log
/opt/soft/test/test4
/opt/soft/test/test5/test3
/opt/soft/test/test3
說明:
查找/opt/soft/test/目錄下 權限為 777的文件
實例4:按類型 查找
命令:
find . -type f -name "*.log"
輸出:
[root@localhost test]# find . -type f -name "*.log"
./log2014.log
./test4/log3- 2.log
./test4/log3-3.log
./test4/log3- 1.log
./log2013.log
./log2012.log
./log.log
./ test5/log5-2.log
./test5/log5- 3.log
./test5/log.log
./test5/log5- 1.log
./test5/test3/log3-2.log
./test5/test3/log3- 3.log
./test5/test3/log3-1.log
./test3/log3- 2.log
./test3/log3-3.log
./test3/log3-1.log
[root@localhost test]#
說明:
查找當目錄,以.log結尾的普通 文件
實例5:查找當前所有目錄並排序
命令:
find . - type d | sort
輸出:
[root@localhost test]# find . -type d | sort
.
./scf
./scf/bin
./scf/doc
./scf/l ib
./scf/service
./scf/service/deploy
./scf/service/ deploy/info
./scf/service/deploy/product
./test3
./t est4
./test5
./test5/test3
[root@localhost test] #
實例6:按大小查找文件
命令:
find . -size +1000c -print
輸出:
[root@localhost test]# find . -size +1000c - print
.
./test4
./scf
./scf/lib
./scf/se rvice
./scf/service/deploy
./scf/service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
./ log2012.log
./test5
./test5/test3
./test3
[root@localhost test]#
說明:
查找當前目錄大於1K的文件
查看全套文章:http://www.bianceng.cn/OS/Linux/201301/35075.htm