- find指令的一般使用格式
- find指令的常用選項和執行個體
find指令的一般使用格式
使用man指令檢視find文檔的内容,可以看到find指令的功能和使用格式。
根據幫助文檔先來對find指令的一般格式做一個簡單介紹。
find指令功能:在一個目錄(及子目錄)中搜尋檔案.
find指令使用格式:find[-H] [-L] [-P] [path...] [expression]
其中:其中,'-H' '-L' '-P'三個選項主要是用來處理符号連接配接,'-H'表示隻跟随指令行中指定的符号連接配接,'-L'表示跟随所有的符号連接配接,'-P'是預設的選項,表示不跟随符号連接配接。
path : find指令所查找的目錄路徑。例如 /home 在根目錄下的home目錄裡面進行查找。
expression :可以分為[option] [action]
option: 用來指定find指令的常用選項,比如-name,-type,-perm等
action: 用來指定find指令後續可執行的一些動作,比如-print,-exec,-ok等
find指令的常用選項詳解
常用選項根據使用目的可分為3部分分别是:
時間相關的選項,使用者或使用者組名稱相關的選項,檔案權限以及名稱相關的選項
時間相關選項
檢視幫助文檔可以看到如下資訊
這類參數選項有
-atime,-ctime,-mtime,-amin, -cmin, -mmin等這些時間選項用法基本相似。而(-*time與-*min差別在于前者以24小時作為機關,後者以分鐘作為機關)我們以-mtime為例做以介紹
-mtime作用和用法詳細介紹
-mtime n: n代表數字,意思是列出在n天之前的“一天之内”被修改過的檔案名。
-mtime +n: “+n”代表列出n天之前(不含第n天本身)被修改過的檔案名。
-mtime -n: “-n" 代表列出在n天之内(含n天本身)被修改過的檔案名
-mtime n的使用
例如指令使用
find /home -mtime 1 -exec ls -ld { } \;
這條指令的意思是在根目錄下的home目錄中查找一天之前的”一天内的“被更改過的檔案并将找到的檔案輸出在終端。後面的-exec ls -ld { } \ 在後面會進行詳細介紹
可以看出列出的是昨天(26号)一天内的檔案資訊。
-mtime +n的使用
例如使用指令
find /home/god -mtime +10 -exec ls -l { } \;
上面指令的意思是列出/目錄下home目錄中的god目錄 符合10天以前修改過的檔案名。然後把這些檔案詳細資訊顯示出來。
從檔案資訊可以看出,所列出的檔案都是10天以前的檔案。
-mtime -n的使用
例如使用指令
find ./cmd/ -mtime -3 -exec ls -l {} \;
意思是在目前目錄下的cmd目錄中查找3天之内(含3天本身)被更改過的檔案的檔案名,最後輸出顯示。27号三天内由26 25 24号,是以如圖
可以看到.file檔案是12月24建立的。
在使用指令
find ./cmd/ -mtime -2 -exec ls -l {} \;
作為對比如圖
可以看出前兩天内,24号的檔案就找不到了(不屬于兩天内的範圍)
-newer file1 ! file2
查找更改時間比檔案file1新但比檔案file2舊的檔案
使用者或使用者組名稱相關的選項
這類選項參數有-uid,-gid,-user,-group,-nouser,-nogrop等選項,下面對這些選項的使用方法和執行個體分析做以陳述。
-uid n:
n為數字,這個數字是使用者的賬号ID,記錄在/etc/passwd/中。可以使用id [使用者名]檢視
例如使用指令
sudo find /home/ -uid 501 -exec ls -l {} \;
由id指令檢視 直到uid為500的使用者是tom,是以執行find指令後查找出來了tom使用者的相關檔案。
-gid n:
這個指令與-uid相似,隻是查找的是與組使用者相關的檔案資訊,是以在此不做過多的贅述。
-user name:
name是使用者賬戶名,這個選項是通過賬戶名來查找相關檔案。
例如使用指令
sudo find /home/ -user tom -exec ls -l {} \;
可以看出通過使用者tom名稱找到了與tom相關的檔案。
-group name:
這個指令與-user name相似,隻是查找的是與組使用者相關的檔案資訊,是以在此不做過多的贅述。
-nouser:
查找無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。
-nogroup
查找無有效所屬組的檔案,即該檔案所屬的組在/etc/groups中不存在。
-nouser和-ongroup可以很友善查找系統中不正常的檔案。
檔案權限以及名稱相關的選項
這類參數選項主要有-name filename,-size,-perm,-prune, -depth等
下面對這些常用的選項使用方法和執行個體進行分析。
-name filename:
filename是目标檔案名。直接查找要查找的檔案。
例如指令:
find /home/god/cmd -name hello.i -exec ls -l {} \;
可以看到直接可以找到目标檔案hello.i
-size [+-] SIZE:
查找比SIZE還要大[+]或者還要小[-]的檔案。SIZE規格有
c: 代表byte
k: 代表1024bytes
例如使用指令:
sudo find /home/ -size +50k -exec ls -lh {} \;
意思是查找路徑為/home/下大于50k的檔案
可以看出檔案大小均大于50k
-perm mode:
查找檔案權限”剛好等于“mode的檔案,舉例來說-rwsr-xr-x屬性是4755 s是檔案特殊權限值。
-perm -mode:
查找檔案權限”必須要全部包含mode權限“如-rwxr–r– 被-rwsr-xr-x包含,是以查找前者0744時後者4755也會被列出來。
-perm +mode:
查找檔案權限”包含任一mode的權限“如我們要查找-rwxr-xr-x,也就是-perm +755時,屬性為-rw——-也會被列出來。
執行個體分析
例如指令:
sudo find / -perm 4755 -exec ls -lh {} \;
可以看到列出了所有檔案權限為4755的檔案
執行個體2
指令:
sudo find /home/god/cmd -perm -0644 -exec ls -l {} \;
執行個體3
指令:
sudo find /home/god/cmd -perm +0744 -exec ls -l {} \;
-type TYPE:
查找檔案類型為TYPE的,類型主要由f(一般檔案), b,c(裝置檔案),d(目錄),l(連結檔案),s(socket檔案),p(FIFO檔案)積累檔案
如指令:
sudo find /bin -type l -exec ls -l {} \;
看以看到查找的都是連結屬性的檔案。
執行個體2
指令:
sudo find / -type b -exec ls -l {} \;
可以看到列出的全部是裝置檔案類型的檔案名。
-prune:
使用這一選項可以使find指令不在目前指定的目錄中查找,如果同時使用-depth選項,那麼-prune将被find指令忽略。
-prune常常配合 -o選項,意思是 expr1 -o expr2 裡面,假如滿足了第一個。我們就忽略第二個
sudo find . -path "./tt" -prune -o -mtime -2 -print
查找修改時間在2天内的檔案并列印,但是排除./tt目錄
-prune, -print 是 action
-prune 是排除該條件
是以結果是:
滿足 -path “./tt” 我們就 -prune 排除
或者滿足 -mtime就 -print(當排除./ttt時候不滿足,因為沒有這個目錄。是以就列印出來2天之内的所有檔案)
執行個體如圖:
-depth:
在查找檔案時,首先查找目前目錄中的檔案,然後再在其子目錄中查找。
find / -name “CON.FILE” -depth –print
它将首先比對所有的檔案然後再進入子目錄中查找
find指令的額外動作(action)
這類參數常用的有-print,-exec,-ok等一下對這三個額外動作做以詳細說明
-print:
find指令将比對的檔案輸出到标準輸出
如指令:
$ sudo find .. -mtime + -print;
意思是在目前目錄的上級目錄查找一天前的檔案,然後将符合的檔案輸出到标準輸出(終端)
-exec :
find指令對比對的檔案執行該參數所給出的shell指令.相應指令的形式為’command’ { } ;,注意{ }和;之間的空格.
格式如:
sudo find /bin -type l -exec ls -l {} \;
分析:這個格式的特殊地方在于”{}“”\;“, { }代表由find找到的内容,find指令找到的内容會被放到{}位置,而-exec一直到”\;“是關鍵字,代表find額外指令的開始-exec到結束(\;),這中間的就是find指令的額外指令,上述就是”ls -l {}“
(;)在bash環境下有特殊意義是以用反斜杠轉義。
find ./ -size 0 -exec rm { } \;
删除檔案大小為零的檔案 (還可以以這樣做:rm -i find ./ -size 0 或 find ./ -size 0 | xargs rm -f &)
為了用ls -l指令列出所比對到的檔案,可以把ls -l指令放在find指令的-exec選項中:
find . -type f -exec ls -l { } \;
(這也是我們開始在用的方式在用的)
-ok:
和-exec的作用相同,隻不過以一種更為安全的模式來執行該參數所給出的shell指令,在執行每一個指令之前,都會給出提示,讓使用者來确定是否執行。
find . -name “*.c” -mtime +5 -ok rm { } ;
在目前目錄中查找所有檔案名以.c結尾、更改時間在5天前的檔案,并删除它們,隻不過在删除之前先給出提示
執行個體如下
指令:
()touch empt
()find . -size -exec rm {} \;
.
看以看到大小為0的檔案被删除了。
執行個體2
指令:
()touch empt
()find . -size -ok rm {} \;
.
看以看出”安全“了很多,避免誤删。**