共計 1625 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要為大家展示了“Linux 下 find 與 exec 如何結合使用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Linux 下 find 與 exec 如何結合使用”這篇文章吧。
在 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 下 find 與 exec 如何結合使用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!