Linux下find命令在目錄結構中搜索文件,並執行指定的操做。
一.命令格式:
find pathname -options [-print -exec -ok]shell
二.命令的參數:
pathname find命令所查找的目錄路徑。例如用 . 來表示當前目錄,用 / 來表示系統根目錄。
-print find命令將匹配的文件輸出到標準輸出。
-exec find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式爲'command' {} \;,注意{}和\;之間的空格,同時兩個{}之間沒有空格,
注意必定有分號結尾。
-ok和-exec的做用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每個命令以前,都會給出提示,讓用戶來肯定是否執行安全
三.命令的選項:
-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小時被改變文件數據的文件spa
四.實例:
1) find . -name 基於文件名查找,可是文件名的大小寫敏感。
find . -name "datafile*"
2) find . -iname 基於文件名查找,可是文件名的大小寫不敏感。
find . -iname "datafile*"
3) find . -maxdepth 2 -name fred 找出文件名爲fred,其中find搜索的目錄深度爲2(距當前目錄), 其中當前目錄被視爲第一層。
4) find . -perm 644 -maxdepth 3 -name "datafile*" (表示權限爲644的, 搜索的目錄深度爲3, 名字爲datafile*的文件)
5) find . -path "./rw" -prune -o -name "datafile*" 列出全部不在。/rw及其子目錄下文件名爲datafile*的文件。
find . -path "./dir*" 列出全部符合dir*的目錄及其目錄的文件。
find . \( -path "./d1" -o -path "./d2" \) -prune -o -name "datafile*" 列出全部不在。/d1和d2及其子目錄下文件名爲datafile*的文件。
6) find . -user ydev 找出全部屬主用戶爲ydev的文件。
find . ! -user ydev 找出全部屬主用戶不爲ydev的文件, 注意!和-user之間的空格。
7) find . -nouser 找出全部沒有屬主用戶的文件,換句話就是,主用戶可能已經被刪除。
8) find . -group ydev 找出全部屬主用戶組爲ydev的文件。
9) find . -nogroup 找出全部沒有屬主用戶組的文件,換句話就是,主用戶組可能已經被刪除。
10)find . -mtime -3[+3] 找出修改數據時間在3日以內[以外]的文件。
find . -mmin -3[+3] 找出修改數據時間在3分鐘以內[以外]的文件。
find . -atime -3[+3] 找出訪問時間在3日以內[以外]的文件。
find . -amin -3[+3] 找出訪問時間在3分鐘以內[以外]的文件。
find . -ctime -3[+3] 找出修改狀態時間在3日以內[以外]的文件。
find . -cmin -3[+3] 找出修改狀態時間在3分鐘以內[以外]的文件。
11)find . -newer eldest_file ! -newer newest_file 找出文件的更改時間 between eldest_file and newest_file.
find . -newer file 找出全部比file的更改時間更新的文件
find . ! -newer file 找出全部比file的更改時間更老的文件
12)find . -type d 找出文件類型爲目錄的文件。
find . ! -type d 找出文件類型爲非目錄的文件。
13)find . -size [+/-]100[c/k/M/G] 表示文件的長度爲等於[大於/小於]100塊[字節/k/M/G]的文件。
14)find . -empty 查找全部的空文件或者空目錄。
15)find . -type f | xargs grep "ABC"進程
使用xargs和-exec的區別是, -exec可能會爲每一個搜索出的file,啓動一個新的進程執行-exec的操做, 而xargs都是在一個進程內完成, 效率更高。io