Bash で find -exec コマンドを実行する

Aashish Sunuwar 2022年3月24日
Bash で find -exec コマンドを実行する

この記事では、find コマンドの -exec パラメータを使用して、find コマンドを使用してファイル内のテキストを検索する方法について説明します。

Bash でファイルを検索するための find コマンドの使い方

find コマンドは、bash でファイルを検索および選択するための便利なツールです。いくつかの式とアクションで find コマンドを使用します。

例:

find ./folder -name *.txt

folder ディレクトリとそのサブディレクトリには、./folder などの検索場所で find コマンドを使用します。そして、-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 コマンドを使用して特定のテキストを検索する

find コマンドと -exec オプションを使用して、検索するテキストを含むファイルを検索できます。

主な概念は、find コマンドを使用して作業ディレクトリ内の各ファイルを取得し、grep コマンドを実行して各ファイル内のテキストを検索することです。

例:

# !/bin/bash
find . -exec grep linux {} \;

次のコマンドは、指定されたテキストが見つかった行を返します。

出力:

find . -exec grep linux {} \;
find . -exec grep linux {} +
title = "Unzip .gz file in linux"
description = "How to unzip a .gz file in linux"

シェルが ; を解釈しないようにするため区切り文字、その前に\を使用します。この戦略を使用すると、テキストが検出された行のみが取得されます。

区切り文字 ;+ で置き換えることで、行とファイル名を取得できます。

# !/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 コマンドに提供され、1 回だけ実行されます。パフォーマンス上の理由から、+ 区切り文字を使用することをお勧めします。