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