在 Bash 中執行 find -exec 命令

Aashish Sunuwar 2022年5月11日
在 Bash 中執行 find -exec 命令

本文將解釋如何使用 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 命令,只執行一次。出於效能原因,我們更喜歡使用 + 分隔符。