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