Linux下find與exec的聯手幹大事

2021-09-21 13:06:01 字數 2013 閱讀 4474

原創 良許

但是,如果只有乙個find命令的話,我們僅能將檔案找出來,列在終端裡。僅乙個find命令還不足以再做進一步的操作。

比如說,我們想把專案資料夾裡的中間檔案(*.o檔案)找出來,再把它們全部刪除;再如,我們想把日誌資料夾下3天以上的日誌全部轉移到指定資料夾下;等等諸如此類的需求,還有非常多。

像這樣的,我們想用find命令找到相關檔案,再作進一步操作,該如何進行呢?這時候exec命令就派上用場。

我們先來看看exec的基本用法。

-exec引數後面跟的就是我們想進一步操作的命令,比如rm,mv等等。exec是以分號";"作為結束識別符號的,考慮到各個系統平台對分號的不同解釋,我們在分號前再加個反斜槓,便於移植。而在分號前,通常也會有一對花括號{},代表前面find命令查詢出來的檔案各。

我們直接通過幾個例項來講解find與exec聯合用法。為了演示的方便,我們假定有如下的乙個專案資料夾:

我們現在想把當前目錄下所有的.o檔案全部找出來,並用 ls -l 命令將它們列出來。實現這個需求的命令如下:

find . -name "*.o" -type f -exec ls -l {} \;
結果如下:

在這裡,我們用find 命令匹配到了當前目錄下的所有.o檔案,並在 -exec 選項中使用 ls -l 命令將它們的詳細資訊列出來。

我們現在想把當前目錄下所有的.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命令 find與exec引數的用法

find是我們很常用的乙個linux命令,但是我們一般查詢出來的並不僅僅是看看而已,還會有進一步的操作,這個時候exec的作用就顯現出來了。看例子 find name txt exec ls l 查詢當前目錄的.txt檔案並以列表形式列出來 find name txt exec mv d 批量修改當...

Linux命令 find與exec引數的用法

url 命令 find與exec引數的用法 url quote find是我們很常用的乙個linux命令,但是我們一般查詢出來的並不僅僅是看看而已,還會有進一步的操作,這個時候exec的作用就顯現出來了。看例子 find name txt exec ls l 查詢當前目錄的.txt檔案並以列表形式列...

find命令處理之exec與xargs區別

對符合條件的檔案執行所給的linux 命令,而不詢問使用者是否需要執行該命令。表示命令的引數即為所找到的檔案,以 表示comman命令的結束。是轉義符,因為分號在命令中還有它用途,所以就用乙個 來限定表示這是乙個分號而不是表示其它意思。ok 和 exec的作用相同,格式也一樣,只不過以一種更為安全的...