在 Bash 中執行 find -exec 命令
Aashish Sunuwar
2022年5月11日
本文將解釋如何使用 find
命令的 -exec
引數使用 find
命令定位檔案中的任何文字。
在 Bash 中使用 find
命令搜尋檔案
find
命令是在 bash 中搜尋和選擇檔案的有用工具。我們使用帶有一些表示式和動作的 find
命令。
例子:
find ./folder -name *.txt
我們使用帶有搜尋位置的 find
命令,例如 ./folder
用於 folder
目錄及其子目錄。而 -name *.txt
表示式是查詢該位置中的每個 .txt
檔案。
在 Bash 中使用 -exec
選項和 find
命令搜尋檔案
我們可以使用 -exec
操作對 find
命令使用 find
命令找到的檔案執行命令。
例子:
find ./folder -name *.txt -exec file {} +
輸出:
./folder/hello.txt: ASCII text, with no line terminators
-exec
操作執行 file
命令,顯示 find
命令返回的檔案型別。
在 Bash 中使用 find -exec
命令搜尋特定文字
我們可以使用帶有 -exec
選項的 find
命令來查詢包含我們要搜尋的文字的檔案。
主要概念是使用 find
命令獲取工作目錄中的每個檔案,並執行 grep
命令查詢每個檔案中的文字。
例子:
# !/bin/bash
find . -exec grep linux {} \;
以下命令將返回找到指定 text
的行。
輸出:
find . -exec grep linux {} \;
find . -exec grep linux {} +
title = "Unzip .gz file in linux"
description = "How to unzip a .gz file in linux"
防止 shell 解釋 ;
分隔符,我們在它之前使用\
。使用這種策略,我們只得到檢測到文字的行。
我們可以通過替換分隔符 ;
來獲取行以及找到它的檔名帶有+
。
# !/bin/bash
find . -exec grep linux {} +
輸出:
./bash.sh:find . -exec grep linux {} \;
./bash.sh:find . -exec grep linux {} +
./unzip_gz_linux.txt:title = "Unzip .gz file in linux"
./unzip_gz_linux.txt:description = "How to unzip a .gz file in linux"
find
處理表示式結果的方式由分隔符決定。如果我們使用分號 ;
,-exec
命令將獨立重複每個結果。
如果我們使用+
符號,所有表示式的結果將被連線起來並提供給 -exec
命令,只執行一次。出於效能原因,我們更喜歡使用 +
分隔符。