在Linux下工作,find命令絕對(duì)是一個(gè)非常高頻的命令。我們可以用find命令來(lái)找到符合某些關(guān)鍵詞的文件,找到某些日期的文件,也可以設(shè)定一些正則表達(dá)式,找到一系列滿(mǎn)足該條件的文件。
但是,如果只有一個(gè)find命令的話(huà),我們僅能將文件找出來(lái),列在終端里。僅一個(gè)find命令還不足以再做進(jìn)一步的操作。
比如說(shuō),我們想把項(xiàng)目文件夾里的中間文件(*.o文件)找出來(lái),再把它們?nèi)縿h除;再如,我們想把日志文件夾下3天以上的日志全部轉(zhuǎn)移到指定文件夾下;等等諸如此類(lèi)的需求,還有非常多。
像這樣的,我們想用find命令找到相關(guān)文件,再作進(jìn)一步操作,該如何進(jìn)行呢?這時(shí)候exec命令就派上用場(chǎng)。
我們先來(lái)看看exec的基本用法。
-exec參數(shù)后面跟的就是我們想進(jìn)一步操作的命令,比如rm,mv等等。exec是以分號(hào)“;”作為結(jié)束標(biāo)識(shí)符的,考慮到各個(gè)系統(tǒng)平臺(tái)對(duì)分號(hào)的不同解釋?zhuān)覀冊(cè)诜痔?hào)前再加個(gè)反斜杠,便于移植。而在分號(hào)前,通常也會(huì)有一對(duì)花括號(hào){},代表前面find命令查找出來(lái)的文件各。
我們直接通過(guò)幾個(gè)實(shí)例來(lái)講解find與exec聯(lián)合用法。為了演示的方便,我們假定有如下的一個(gè)項(xiàng)目文件夾:
實(shí)例1:使用find命令查找相關(guān)文件后,再使用ls命令將它們的詳細(xì)信息列出來(lái)
我們現(xiàn)在想把當(dāng)前目錄下所有的.o文件全部找出來(lái),并用 ls -l 命令將它們列出來(lái)。實(shí)現(xiàn)這個(gè)需求的命令如下:
find 。 -name “*.o” -type f -exec ls -l {} ;
結(jié)果如下:
在這里,我們用find 命令匹配到了當(dāng)前目錄下的所有.o文件,并在 -exec 選項(xiàng)中使用 ls -l 命令將它們的詳細(xì)信息列出來(lái)。
實(shí)例2:使用find命令查找相關(guān)文件后,再使用rm命令將它們刪除
我們現(xiàn)在想把當(dāng)前目錄下所有的.o文件全部找出來(lái),并用rm命令將它們刪除。實(shí)現(xiàn)這個(gè)需求的命令如下:
find 。 -name “*.o” -exec rm {} ;
執(zhí)行完這個(gè)命令后,該目錄下所有的.o文件都被刪除。由于這個(gè)動(dòng)作完成后也不會(huì)有任何提示,所以就沒(méi)有截圖的必要了。
實(shí)例3:使用-exec選項(xiàng)的安全模式,將對(duì)每個(gè)匹配到的文件進(jìn)行操作之前提示用戶(hù)
在實(shí)例2中,我們匹配到文件后就立刻執(zhí)行rm命令,這樣操作有些危險(xiǎn),因?yàn)槿绻坏┱`操作,有可能會(huì)引起災(zāi)難性的后果。
exec的安全模式就是為了避免這個(gè)問(wèn)題而產(chǎn)生。它會(huì)在匹配到某個(gè)文件后,在進(jìn)行操作之前會(huì)先問(wèn)一下你,經(jīng)過(guò)你的確認(rèn)它才會(huì)進(jìn)行相應(yīng)操作。
同樣的實(shí)例2的需求,如果采用安全模式的話(huà),命令是這樣的:
find 。 -name “*.o” -ok rm {} ;
執(zhí)行結(jié)果如下:
實(shí)例4:搜索匹配到的文件中的關(guān)鍵內(nèi)容
假如我現(xiàn)在有個(gè)很大型的項(xiàng)目(如Linux內(nèi)核),我想在里面搜索一個(gè)含有某關(guān)鍵字的文件。我們可以使用grep命令檢索所有的文件。這樣做肯定是可以的,但如果項(xiàng)目很大的話(huà),這樣太耗時(shí)了,效率太低。
我們可以先用find命令找到所以相關(guān)文件,然后再用grep命令檢索那些文件即可。因?yàn)橐呀?jīng)使用find過(guò)濾一遍了,所以這樣操作會(huì)節(jié)約很多時(shí)間,提高效率。
命令如下:
find 。 -name “*.h” -exec grep -rns “hello” {} ;
結(jié)果如下:
實(shí)例5:查找文件并移動(dòng)到指定目錄
這個(gè)需求就比較簡(jiǎn)單了。比如我現(xiàn)在想把所有的.o文件找出來(lái),然后新他們mv到buil目錄。命令如
下:
find 。 -name “*.o” -exec cp {} build ;
結(jié)果如下:
責(zé)編AJX
-
Linux
+關(guān)注
關(guān)注
87文章
11326瀏覽量
209964 -
Find
+關(guān)注
關(guān)注
0文章
54瀏覽量
11660 -
Shell
+關(guān)注
關(guān)注
1文章
366瀏覽量
23425 -
操作環(huán)境
+關(guān)注
關(guān)注
0文章
9瀏覽量
7064
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論