第十一天:find
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
一般形式: find pathname -options [-print -exec -ok ...] 命令參數(shù):- pathname: find命令所查找的目錄路徑。例如用.來表示當(dāng)前目錄,用/來表示系統(tǒng)根目錄。
- -print: find命令將匹配的文件輸出到標(biāo)準(zhǔn)輸出。
- -exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應(yīng)命令的形式為"command { } \; ",注意"{ }"和“\;”之間的空格。
- -ok: 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
-size n:[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節(jié)計。 -depth:在查找文件時,首先查找當(dāng)前目錄中的文件,然后再在其子目錄中查找。 -fstype:查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通常可以在配置文件/etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。 -mount:在查找文件時不跨越文件系統(tǒng)mount點。 -follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。 -cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設(shè)備中。 另外,下面三個的區(qū)別: -amin n?查找系統(tǒng)中最后N分鐘訪問的文件 -atime n?查找系統(tǒng)中最后n*24小時訪問的文件 -cmin n?查找系統(tǒng)中最后N分鐘被改變文件狀態(tài)的文件 -ctime n?查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件 -mmin n?查找系統(tǒng)中最后N分鐘被改變文件數(shù)據(jù)的文件 -mtime n?查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件
例子: 使用exec或ok來執(zhí)行shell命令 find命令匹配到了當(dāng)前目錄下的所有普通文件,并在-exec選項中使用ls -l命令將它們列出。 find . -type f -exec ls -l { } \; 在/logs目錄中查找更改時間在5日以前的文件并刪除它們: $ find logs -type f -mtime +5 -exec rm { } \; find命令在當(dāng)前目錄中查找所有文件名以.LOG結(jié)尾、更改時間在5日以上的文件,并刪除它們,只不過在刪除之前先給出提示。 $ find . -name "*.conf" -mtime +5 -ok rm { } \; find命令首先匹配所有文件名為“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后執(zhí)行g(shù)rep命令看看在這些文件中是否存在一個sam用戶。find /etc -name "passwd*" -exec grep "sam" { } \;
查找當(dāng)前用戶主目錄下的所有文件: find $HOME -print ? 或者 find ~ -print 列出當(dāng)前用戶主目錄下文本屬主有讀,寫權(quán)限,本組和其他只有讀的權(quán)限 find . -type f -perm 644 -exec ls -l {} \; 列出系統(tǒng)文件長度為0的文件 find / -type f -size 0 -exec ls -l {} \; 列出/var/logs路徑下更改時間在7天前的并提示刪掉 find /var/logs -type f -mtime +7 -ok ?rm {} \;? 找出屬于root組的文件 find . -group root -exec ls -l {} \; find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok ?rm {} \; ?后綴數(shù)字不超過999的文件 find /apps -path "/apps/bin" -prune -o -print 在/apps目錄下查找文件,但不希望在/apps/bin目錄下查找,可以用: ?find /apps -path "/apps/bin" -prune -o -print -path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o -print 的簡寫表達(dá)式按順序求值, -a 和 -o 都是短路求值,與 shell 的 && 和 || 類似如果 -path "/usr/sam" 為真,則求值 -prune , -prune 返回真,與邏輯表達(dá)式為真;否則不求值 -prune,與邏輯表達(dá)式為假。如果 -path "/usr/sam" -a -prune 為假,則求值 -print ,-print返回真,或邏輯表達(dá)式為真;否則不求值 -print,或邏輯表達(dá)式為真。 這個表達(dá)式組合特例可以用偽碼寫為 if -path "/usr/sam" then -prune else -print
避開多個文件夾 find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print 圓括號表示表達(dá)式的結(jié)合。 \ 表示引用,即指示 shell 不對后面的字符作特殊解釋,而留給 find 命令去解釋其意義。 查找某一確定文件,-name等選項加在-o 之后 #find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print
如果希望按照更改時間來查找文件,可以使用mtime,atime或ctime選項。如果系統(tǒng)突然沒有可用空間了,很有可能某一個文件的長度在此期間增長迅速,這時就可以用mtime選項來查找這樣的文件。 在系統(tǒng)根目錄下查找更改時間在5日以內(nèi)的文件? find / -mtime -5 -print find -newer httpd1.conf ! -newer temp -ls 查找更改時間比文件httpd1.conf新但比文件temp舊的文件:
在使用find命令時,可能希望先匹配所有的文件,再在子目錄中查找。使用depth選項就可以使find命令這樣做。這樣做的一個原因就是,當(dāng)在使用find命令向磁帶上備份文件系統(tǒng)時,希望首先備份所有的文件,其次再備份子目錄中的文件。 find / -name "CON.FILE" -depth -print
轉(zhuǎn)載于:https://my.oschina.net/u/566829/blog/227105
總結(jié)
- 上一篇: Java NIO示例:多人网络聊天室
- 下一篇: Oracle中表被删除或数据被错误修改后