在Linux下作業,find命令絕對是一個非常高頻的命令,我們可以用find命令來找到符合某些關鍵詞的檔案,找到某些日期的檔案,也可以設定一些正則運算式,找到一系列滿足該條件的檔案,
但是,如果只有一個find命令的話,我們僅能將檔案找出來,列在終端里,僅一個find命令還不足以再做進一步的操作,
比如說,我們想把專案檔案夾里的中間檔案(*.o檔案)找出來,再把它們全部洗掉;再如,我們想把日志檔案夾下3天以上的日志全部轉移到指定檔案夾下;等等諸如此類的需求,還有非常多,
像這樣的,我們想用find命令找到相關檔案,再作進一步操作,該如何進行呢?這時候exec命令就派上用場,
我們先來看看exec的基本用法,
-exec引數后面跟的就是我們想進一步操作的命令,比如rm,mv等等,exec是以分號";"作為結束識別符號的,考慮到各個系統平臺對分號的不同解釋,我們在分號前再加個反斜杠,便于移植,而在分號前,通常也會有一對花括號{},代表前面find命令查找出來的檔案各,
我們直接通過幾個實體來講解find與exec聯合用法,為了演示的方便,我們假定有如下的一個專案檔案夾:

實體1:使用find命令查找相關檔案后,再使用ls命令將它們的詳細資訊列出來
我們現在想把當前目錄下所有的.o檔案全部找出來,并用 ls -l 命令將它們列出來,實作這個需求的命令如下:
find . -name "*.o" -type f -exec ls -l {} \;
結果如下:

在這里,我們用find 命令匹配到了當前目錄下的所有.o檔案,并在 -exec 選項中使用 ls -l 命令將它們的詳細資訊列出來,
實體2:使用find命令查找相關檔案后,再使用rm命令將它們洗掉
我們現在想把當前目錄下所有的.o檔案全部找出來,并用rm命令將它們洗掉,實作這個需求的命令如下:
find . -name "*.o" -exec rm {} \;
執行完這個命令后,該目錄下所有的.o檔案都被洗掉,由于這個動作完成后也不會有任何提示,所以就沒有截圖的必要了,
實體3:使用-exec選項的安全模式,將對每個匹配到的檔案進行操作之前提示用戶
在實體2中,我們匹配到檔案后就立刻執行rm命令,這樣操作有些危險,因為如果一旦誤操作,有可能會引起災難性的后果,
exec的安全模式就是為了避免這個問題而產生,它會在匹配到某個檔案后,在進行操作之前會先問一下你,經過你的確認它才會進行相應操作,
同樣的實體2的需求,如果采用安全模式的話,命令是這樣的:
find . -name "*.o" -ok rm {} \;
執行結果如下:

實體4:搜索匹配到的檔案中的關鍵內容
假如我現在有個很大型的專案(如Linux內核),我想在里面搜索一個含有某關鍵字的檔案,我們可以使用grep命令檢索所有的檔案,這樣做肯定是可以的,但如果專案很大的話,這樣太耗時了,效率太低,
我們可以先用find命令找到所以相關檔案,然后再用grep命令檢索那些檔案即可,因為已經使用find過濾一遍了,所以這樣操作會節約很多時間,提高效率,
命令如下:
find . -name "*.h" -exec grep -rns "hello" {} \;
結果如下:

實體5:查找檔案并移動到指定目錄
這個需求就比較簡單了,比如我現在想把所有的.o檔案找出來,然后新他們mv到buil目錄,命令如
下:
find . -name "*.o" -exec cp {} build \;
結果如下:

更多精彩內容,請關注公眾號良許Linux,公眾內回復1024可免費獲得5T技術資料,包括:Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智能,等等,公眾號內回復進群,邀請您進高手如云技術交流群,
公眾號:良許Linux
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/39680.html
標籤:Linux
上一篇:服務器方面的問題請大神們幫忙
下一篇:umask無效問題
