find命令用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視爲欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。
語法
find path -option [ -print ] [ -exec -ok command ] {} \;
參數說明 :
find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份爲 path,之後的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 爲預設 expression。
expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。
-mount, -xdev : 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n : 在過去 n 分鐘內被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去n天內被讀取過的文件
-cmin n : 在過去 n 分鐘內被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去n天內被修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
-size n : 文件大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。-type c : 文件類型是 c 的文件。
d: 目錄
c: 字型裝置文件
b: 區塊裝置文件
p: 具名貯列
f: 一般文件
l: 符號連結
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 將運算式分隔,並使用下列運算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
實例
find -name 查找某個文件,文件名爲name
例如:
find /etc/ -name abc 查找/etc/目錄下名爲abd的文件並輸出
find /etc -name *.conf 查找/etc/目錄下所有以.conf結尾的文件
find /etc -name VBM 查找/etc/目錄下所有以VBM開頭的文件
find -user name 查找某個文件所有人爲user的文件
find -group name 查找某個文件所有組爲group的文件
find -user name1 -group name2,查找文件所有人爲name1且所有組爲name2的文件
find -not -user name 查找文件所有人不爲name的文件 (-not表示反的意思)
find -not -user test-o -group root 查找文件所有人不爲test或者文件所有組爲root的文件 -o表示或者
find /etc -maxdepth 1 -name passwd 查找此目錄最多下一級目錄的文件passwd
find /etc -maxdepth 2 -mindepth 2 -name *.conf查找/etc下最多兩級且最少兩極的目錄的以.conf結尾的文件
測試:
find /home/work -size 20K 查找20K的文件
find /home/work -size -20K 查找小於20K的文件
find /mnt -size +20K 查找大於20K的文件
測試:在/home/work/下給file1 file2 寫入不同大小,然後測試以上命令
dd if=/dev/zero of=/home/work/file1 bs=1 count=10240
dd if=/dev/zero of=/home/work/file1 bs=1 count=20480
運行結果:
[root@glkjdevapp work]# find /home/work -size +9k;
/home/work/VBM_ROM7.0.TEST.war
/home/work/file1
find -type 查找文件類型
find /home/work -type d 查找目錄
find /home/work -type f 查找文件
運行結果:
[root@glkjdevapp work]# find /home/work -size +9k;
/home/work/VBM_ROM7.0.TEST.war
/home/work/file1
[root@glkjdevapp work]# find /home/work -type d
/home/work
[root@glkjdevapp work]# find /home/work -type f
/home/work/VBM_ROM7.0.TEST.war
/home/work/file1.txt
/home/work/file2.txt
/home/work/file1
find /home/work -cmin 10 查找整10分鐘前操作的文件
find /home/work -cmin -10 查找10分鐘內操作的文件
find /home/work -cmin +10 查找10分鐘前操作的文件
find -perm
測試,創建文件:touch /home/work/file {1..5}
分配權限:
chmod 000 *
chmod 404 file1
chmod 444 file2
chmod 644 file3
chmod 640 file4
find /home/work/ -perm 444 查找權限爲444的文件,所以查找到的文件是file2
[root@glkjdevapp work]# find /home/work/ -perm 444
/home/work/file2
find /home/work/ -perm -444 查找權限包括444的文件,因爲444是r--r--r--,644是rw-r--r--,所以644包含444,所以查找到的文件是file2和file3.
[root@glkjdevapp work]# find /home/work/ -perm -444
/home/work/
/home/work/file2
/home/work/file3
find /home/work -perm /444 查找 o權限包括r或g權限包括r或o權限包括r的文件,即只要包含r即可,所以查找到的文件是file1 file2 file3 file4。
[root@glkjdevapp work]# find /home/work -perm /444
/home/work
/home/work/file1
/home/work/file2
/home/work/file3
/home/work/file4
find -exec command {} {}表示查找到的文件
例如:find /home/work -perm 444 -exec rm -rf {} \;整體這個命令的意思是,刪除權限爲444的文件
find /etc -name *.conf -exec cp -rp {} /home/work\;遞歸複製/etc下以.conf結尾的文件到/home/work下