LINUX 下查找指定時(shí)間的所有文件
find. -name "*.txt" -mtime -1
//以上為1小時(shí)以內(nèi)的當(dāng)前目錄內(nèi)修改的所有為txt格式的文件. 其中-1為1小時(shí)以內(nèi), +1為1小時(shí)之前
find
. -mmin -10 //查找10分鐘內(nèi)當(dāng)前目錄內(nèi)修改的所有文件
?find . -mmin +10 //查找1小時(shí)內(nèi),10分鐘外當(dāng)前目錄內(nèi)修改的所有文件
//-mmin為查找1小時(shí)內(nèi)的按照分鐘計(jì)算的修改文件
find . -newer a.txt //查找10分鐘內(nèi)當(dāng)前目錄內(nèi)修改的所有文件
//查找當(dāng)前目錄下(遞歸子目錄)的所有修改時(shí)間在a.txt之后(所以文件更新)的文件和目錄
不常用指令
find命令用于查找文件和目錄,任何位于參數(shù)之前的字符串都將被視為欲查找的目錄。
find可以指定查找條件如名稱颓鲜,類型尊浪,時(shí)間,文件大小城看,權(quán)限和所有者查找女气,針對(duì)多個(gè)條件進(jìn)行與或非的邏輯運(yùn)算。我們可以控制find的查找的行為析命,還可以和其他命令組合使用主卫。
find
find .
find . -print
三者等效, 查找當(dāng)前目錄下所有的文件和目錄(遞歸子目錄)逃默,以每行一個(gè)文件或者目錄的形式列舉出,不包含隱藏文件
findlib opt bin
同上簇搅,查找指定的多個(gè)目錄(lib/opt/bin)
(1) 指定查找條件
1) 按名稱查找
find. -name readme.txt
查找當(dāng)前目錄下(遞歸子目錄)的所有名為readme.txt的文件
find. -name \*.txt
find. -name “*.txt”
查找當(dāng)前目錄下(遞歸子目錄)的所有名稱以.txt結(jié)尾的文件完域,注意*號(hào)的寫法,需要前面加\或者放到雙引號(hào)中
find. -iname \*.txt
默認(rèn)find是區(qū)分大小寫的瘩将,如果不想?yún)^(qū)分大小寫吟税,請(qǐng)使用-iname替代-name,如上則”abc.TXT”將被查找到
2) 按類型查找
find. -type d
查找當(dāng)前目錄下(遞歸子目錄)的所有目錄
find. -type f
查找當(dāng)前目錄下(遞歸子目錄)的所有文件
find. -type l
查找當(dāng)前目錄下(遞歸子目錄)的所有符號(hào)鏈接
3) 按時(shí)間查找
1. 以小時(shí)為單位的時(shí)間
find命令三個(gè)選項(xiàng)用于按照時(shí)間查找姿现,單位都是小時(shí):
mtime
— 文件內(nèi)容上次修改時(shí)間
atime
— 文件被讀取或訪問的時(shí)間
ctime
— 文件狀態(tài)變化時(shí)間
這三個(gè)選項(xiàng)都需要配置一個(gè)n值使用肠仪,可以是-n / n / +n:
-n 小于n
n 正好與 n 相等
+n 大于n
find. -mtime -1
查找當(dāng)前目錄下(遞歸子目錄)的所有1小時(shí)內(nèi)修改的文件和目錄
find. -mtime +1
查找當(dāng)前目錄下(遞歸子目錄)的所有修改時(shí)間超過1小時(shí)的文件和目錄
find. -mtime 1
查找當(dāng)前目錄下(遞歸子目錄)的所有恰好在1小時(shí)前修改的文件和目錄
2. 以分鐘為單位的時(shí)間
用法和*time類似,mmin备典、amin和cmin 的不同在于單位時(shí)間是分鐘异旧,用于查找在不到1小時(shí)的時(shí)間內(nèi)變化了的文件和目錄
find. -mmin -10
查找當(dāng)前目錄下(遞歸子目錄)的所有10分鐘內(nèi)修改的文件和目錄
find. -mmin +20
查找當(dāng)前目錄下(遞歸子目錄)的所有20分鐘外1小時(shí)內(nèi)修改的文件和目錄
3. 與特定的文件比較
-newer,-anewer和-cnewer選項(xiàng)用于查找與特定的文件比較的已修改或訪問過的文件,類似mtime,atime和ctime
-newer指內(nèi)容最近被修改的文件
-anewer指最近被讀取過的文件
-cnewer指狀態(tài)最近發(fā)生變化的文件
find. -newer a.txt
查找當(dāng)前目錄下(遞歸子目錄)的所有修改時(shí)間在a.txt之后(所以文件更新)的文件和目錄
4) 按文件大小查找
-size 選項(xiàng)用于查找滿足指定的大小條件的文件(注意不查找目錄), +表示大于, -表示小于, 沒有+1表示正好等于提佣。文件大小的單位可以是字節(jié)(用c表示), kb(用k表示)吮蛹。
find. -size -100c
查找當(dāng)前目錄下(遞歸子目錄)的所有文件大小小于100字節(jié)的文件
find. -size +100k
查找當(dāng)前目錄下(遞歸子目錄)的所有文件大小大于100k的文件
find. -size 0
查找當(dāng)前目錄下(遞歸子目錄)的所有文件大小為0的文件
-empty 查找空文件和空文件夾, 和-size 0不同的在于-size 0 只查找空文件,或者說-empty -type f 等同于-size 0 :
find. -empty
查找當(dāng)前目錄下(遞歸子目錄)的所有文件大小為0的文件和空文件夾
find. -empty -type f
查找當(dāng)前目錄下(遞歸子目錄)的所有文件大小為0的文件
find. -empty -type d
查找當(dāng)前目錄下(遞歸子目錄)的所有空目錄
5) 按權(quán)限和所有者查找
find. -perm 777
查找當(dāng)前目錄下(遞歸子目錄)的所有權(quán)限為777的文件和目錄
find. -perm -u=rwx
查找當(dāng)前目錄下(遞歸子目錄)的所有user權(quán)限為rwx的文件和目錄
find. -perm -ug=x
查找當(dāng)前目錄下(遞歸子目錄)的所有user和group權(quán)限為x的文件和目錄
find. -user sky
查找當(dāng)前目錄下(遞歸子目錄)的所有user為sky的文件和目錄
find. -group users
查找當(dāng)前目錄下(遞歸子目錄)的所有g(shù)roup為users的文件和目錄
(2) 查找條件的邏輯運(yùn)算
1. 邏輯與
find. -name “*.java” -size -mmin -10
find. -name “*.java” -a -size -mmin -10
查找當(dāng)前目錄下(遞歸子目錄)的所有名為*.java并且修改時(shí)間在10分鐘之內(nèi)的文件拌屏,-a是默認(rèn)選項(xiàng)
2. 邏輯或
find. -name “*.class” -o -name “*.jar”
查找當(dāng)前目錄下(遞歸子目錄)的所有名為*.class或者*.jar的文件和目錄
3. 邏輯非
find. ! -user sky
查找當(dāng)前目錄下(遞歸子目錄)的所有user不是sky的文件和目錄
(3) 控制查找的行為
find. -maxdepth 3 -name “*.txt”
查找當(dāng)前目錄下(遞歸子目錄)的所有名為*.txt的文件潮针,目錄深度不超過3層
find. -maxdepth 1 -name “*.txt”
查找當(dāng)前目錄下(不遞歸子目錄,因?yàn)閙axdepth為1)的所有名為*.txt的文件
find. -mindepth 3 -name “*.txt”
查找當(dāng)前目錄下(遞歸子目錄)的所有名為*.txt的文件倚喂,目錄深度不低于3層
find. -mindepth 1 -name “*.txt”
查找當(dāng)前目錄下的子目錄中(遞歸子目錄)的所有名為*.txt的文件每篷,不包含當(dāng)前目錄
find. -depth -name “*.txt”
查找當(dāng)前目錄下(遞歸子目錄)的所有名為*.txt的文件,每個(gè)目錄都是先在目錄中進(jìn)行查找端圈,然后才繼續(xù)查找其子目錄
(4)find和其他命令的組合
find. -name “*.jar” -exec ls -l {} \;
find. -name “*.jar” -ls
查找當(dāng)前目錄下(遞歸子目錄)的所有*.jar文件并使用ls -l列出詳細(xì)信息
find. -name “*.java” -exec grep HashMap {} \;
查找當(dāng)前目錄下(遞歸子目錄)的所有的含有”HashMap”字樣的*.java文件
find. -name “*.sh” -exec mv {} backup \;
查找當(dāng)前目錄下(遞歸子目錄)的所有的*.sh文件并移動(dòng)到backup目錄中
以下轉(zhuǎn)自:http://luojiaofei.blog.163.com/blog/static/14360348920114611233559/
我們經(jīng)常要在日常的工作中查找文件焦读,要說linux下最強(qiáng)大的文件查找工具,非find莫屬枫笛。find可以從文件名吨灭、讀取修改時(shí)間、大小刑巧、類型等等來篩選文件喧兄,可以完成日常幾乎所有的查找需求。
來看一個(gè)簡單的例子:
find/tmp/ -name ‘galeki*’
意思就是在/tmp目錄下找出以“galeki”開頭的文件啊楚,-name指出是對(duì)文件名進(jìn)行篩選吠冤,是不是很簡單明了?除了文件名恭理,find還有更強(qiáng)大的篩選條件:
1.時(shí)間:
參數(shù) 意義
-atime
n 上一次存取時(shí)間在n*24小時(shí)前以內(nèi)的文件
-ctime
n 上一次狀態(tài)改變?cè)趎*24小時(shí)前以內(nèi)的文件
-mtime
n 上一次修改時(shí)間在n*24小時(shí)前以內(nèi)的文件
-newer
file 比file所指的文件還要新的文件
2.大姓蕖:
參數(shù) 意義
-size
n[bkMG] 大小為n(b為比特,k為KB,M為MB涯保,G為GB)的文件
3.所有者:
參數(shù) 意義
-user
name 所有者用戶名稱是name的文件
-group
name 所有者用戶組群名稱是name的文件
例子:
find
/tmp/ -name ‘sess*’ -mtime 1? ?#在/tmp目錄下找到所有以’sess’開頭诉濒、并且在一個(gè)小時(shí)以內(nèi)修改過的文件
find
./ -name ‘*.zip’ -size 546k? ? ? ?#在當(dāng)前目錄下找到所有546KB的zip壓縮包文件
find
/tmp/ -user ‘galeki’? ? ? ? ? ? ? ?#在/tmp目錄下找到所有所有者為galeki的文件
另外,還可以用”+”夕春、”-“來進(jìn)一步修飾時(shí)間和大小的條件:
find
src/ -mtime +2? ? ? ? ? ? #找出src目錄下上一次修改時(shí)間在2天以前的文件
find
download/ -size +50M? ? #在download目錄下找出大于50M的文件
光找出文件還不夠未荒,我們還要對(duì)找出的文件進(jìn)行處理才有意義,一般來講可以把find的查找結(jié)果傳遞給其他的命令做進(jìn)一步處理及志。find本身也提供了許多處理動(dòng)作的選項(xiàng)片排。
常用的處理動(dòng)作:
參數(shù) 意義
打印出找出文件的完整地址,一個(gè)文件一行
-delete
刪除找出的文件
-execcommand {} \;
對(duì)每一個(gè)找到的文件執(zhí)行command命令速侈,
并用文件替換”{}”率寡,“\;”是固定的結(jié)束符。
例子:
find
/tmp/ -ctime +7 -delete? ? ? ? ? ? #刪除/tmp目錄下一周以前創(chuàng)建的文件
find
./ -name ‘*.unk’ -exec file {} \;? ?#找出當(dāng)前文件夾下后綴是unk的文件倚搬,并用file命令顯示每個(gè)文件的文件類型
========================
查找并打包:
find. -name “*.txt” -mtime -1 | xargs -n 100 tar -rvf 20110902.tar
//查找當(dāng)前文件夾下所有1天內(nèi)修改的txt文件并打包為20110902.tar
find./ -name “*[cC][aA][mM][eE][rR][aA]*.*” -ok tar -czvf my.tar.gz {} \
========================
以下轉(zhuǎn)自:http://www.linuxsir.org/main/?q=node/137
一冶共、find 命令格式
1、find命令的一般形式為每界;
findpathname -options [-print -exec -ok ...]
2比默、find命令的參數(shù);
pathname:
find命令所查找的目錄路徑盆犁。例如
style="color: #888888;">
#ff0000;">用
style="color: #000000;">.來表示當(dāng)前目錄,用
#000000;">/來表示系統(tǒng)根目錄篡九。
-print: find命令將匹配的文件輸出到標(biāo)準(zhǔn)輸出谐岁。
-exec: find命令對(duì)匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應(yīng)命令的形式為'command' {? } \;榛臼,注意{? ?}和\伊佃;之間的空格。
-ok: 和-exec的作用相同沛善,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令航揉,在執(zhí)行每一個(gè)命令之前,都會(huì)給出提示金刁,讓用戶來確定是否執(zhí)行帅涂。
4、使用find查找文件的時(shí)候怎么避開某個(gè)文件目錄
比如要在/usr/sam目錄下查找不在dir1子目錄之內(nèi)的所有文件
find/usr/sam -path "/usr/sam/dir1" -prune -o -print
find
[-path ..] [expression] 在路徑列表的后面的是表達(dá)式
-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á)式為真液肌。
這個(gè)表達(dá)式組合特例可以用偽碼寫為
if-path "/usr/sam"? then
-prune
else
避開多個(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 \) -