1. -maxdepth的用法
-maxdepth
和-mindepth
可以限制搜索的深度释簿。當搜索文件超過某個級別或者搜索過多的目錄,會導致查找速度變慢应媚,查找花費的時間過多扣讼,這時候就可以用-maxdepth
來解決:
find /home -maxdepth 1 -name "*.csv" -mtime -5 | wc -l
本例表示只在/home目錄下查找最后修改時間在5天以內的csv文件,并統(tǒng)計文件的數目垃帅。如果修改為-maxdepth 2
就表示在/home目錄及其一級子目錄下查找延届,不會搜索到/home/sub/sub1目錄下。-mindepth
的意義同-maxdepth相反贸诚,此處不贅述方庭。
2. -depth的用法和find結果的排列順序
在你想要批量備份文件的時候,總希望先備份所有的文件酱固,再備份子目錄下的文件械念,這里需要考慮如何find出想要備份文件的順序。
-depth
可以在處理目錄以前首先處理目錄下的子內容运悲。以下查詢顯示了使用-depth
的效果:
第一個例子:不使用depth龄减,使用通配符*搜索當前目錄下的file和directory
find *
#輸出結果:
chmod
result.txt
sasuser.v94
sasuser.v94/regstry.sas7bitm
sasuser.v94/parms.sas7bcat
zhnlicron
第二個例子:使用depth,使用通配符*搜索當前目錄下的file和directory
find * -depth
#輸出結果
chmod
result.txt
sasuser.v94/regstry.sas7bitm
sasuser.v94/parms.sas7bcat
sasuser.v94
zhnlicron
可以看到/sasuser和它的子目錄中的文件位置做了調換班眯。find * -depth
會先輸出/sasuser目錄下的文件希停。
那么問題來了,在不考慮depth的情況下鳖敷,find是按照什么順序來輸出結果呢脖苏?如上第一個例子使用了*通配符,所以默認會先按照字典序來匹配定踱,在進行find操作棍潘。
比如*會先匹配到當前目錄下的./chmod,然后再find ./chmod崖媚,所以find出來的結果是按照字典序的亦歉。
我們再做一個find操作,不使用通配符*直接進行find當前目錄:
find .
#輸出結果
chmod
zhnlicron
result.txt
sasuser.v94
sasuser.v94/regstry.sas7bitm
sasuser.v94/parms.sas7bcat
位置再次發(fā)生了變化畅哑,至少表面上看不可能是按照字典序了肴楷,那么是依照什么規(guī)則呢?這種則涉及到linux中文件名在超級塊中的存儲方式(spuer_block):為了快速找到一個文件荠呐,我們通常會使用hash算法赛蔫,和B樹算法(二叉樹算法)在超級塊存儲文件名(與inode對應)砂客,find操作就是根據B樹遍歷查找的。
在不同的機器中呵恢,文件掛到B樹上的方式不同鞠值,可能遍歷查找的結果就會不同。比如以左遍歷掛文件名渗钉,右遍歷來查找文件名彤恶。參考資料
3. 使用多個{}的例子
繼續(xù)上面提出的備份問題,我們已經按照順序把需要的文件find出來了鳄橘,需要批量備份成*.bak文件声离。可以利用{}這樣寫:
find -name "*.txt" -exec cp {} {}.bak \;
#注意括號之間的空格瘫怜。
#批量將當前目錄下后綴為txt的文件備份一份txt.bak文件
4. -perm的用法
上一篇將find操作用于定時crontab任務术徊,來執(zhí)行change group
的操作。其實可以用-perm
來更準確的定位到需要修改權限的文件鲸湃。-perm的用法有以下幾種簡單的形式:
- find -perm mode
- find -perm -mode
- find -perm +mode
mode表示嚴格匹配弧关,-mode表示find權限大于等于mode的文件,+mode表示find權限小于等于mode的文件(可能跟正常的認識剛好相反)唤锉。
find . -perm -g=r -type f -exec ll {} \;
#找到具有組讀權限的文件世囊,用ll命令顯示文件詳細信息。
find . -perm -744;
#找到權限大于等于744的文件窿祥。
【權限的數字表示】使用ll命令可以查看文件的權限:
ll /home/tyrone
#顯示結果
-rw-rw-r-- 1 tyrone tyrone 199 Jun 9 20:02 autoexec.sas
-rw-rw-r-- 1 tyrone tyrone 0 Jun 4 01:42 chmod
-rw------- 1 tyrone tyrone 0 Jun 9 19:36 nohup.out
-rw-rw-r-- 1 tyrone tyrone 70429 Jun 10 22:10 resultOfNas.txt
drwxrwxr-x 2 tyrone tyrone 4096 Jun 9 23:11 sasuser.v94
-rw-rw-r-- 1 tyrone tyrone 0 Jun 5 02:13 tyronecron
最左邊是一串字母和-的集合株憾,從第二列開始每三個一組,分別表示文件所屬用戶晒衩、所屬組嗤瞎、組外用戶的權限。r代表讀听系,w代表寫贝奇,x代表執(zhí)行。例如-rw-rw-r--
就表示文件所屬用戶和所屬組對該文件有讀寫權限靠胜,組外只有讀的權限掉瞳。
那么怎么對應于數字呢?其中浪漠,r=4陕习,w=2,x=1址愿,然后每三個字母一組把數字加起來的和組成一個三位數字该镣。例如-rw-rw-r--
就等于-420420400
,化為三位數字664即為權限所對應的值响谓。