ファイルを検索するgrepコマンドとfindコマンドについて整理しています.

grepコマンドはファイルの中身を検索するのに対し,findコマンドはファイル名や更新日から検索を行います.

目次

  1. grepコマンド
    1. AND検索・OR検索
    2. NOT検索
    3. その他のオプション
  2. findコマンド
    1. 更新時刻に基づくファイル検索
    2. 複数ファイルで句読点を一括置換
    3. 複数ファイルでパーミッションを一括変更

grepコマンド

ファイル中の文字列を検索するにはgrepを使います.
正規表現を利用することが可能です.

カレントディレクトリの拡張子txtのファイルにおいて,文字列を検索するには,

grep '文字列' *.txt

とします.

AND検索・OR検索

検索する文字列が複数存在する場合, eオプションでOR検索できます.

grep -e '文字列1' -e '文字列2' *.txt

AND検索するにはパイプで繋ぎます.

grep '文字列1' *.txt | grep '文字列2'

NOT検索

指定文字列を含まないものを選び出す場合,vオプションを使います.

その他のオプション

厳密な検索ではxオプションを用い,指定した文字列とある1行が等しい場合にのみマッチさせます.

iオプションがつくと,大文字・小文字の区別は無視されます.

文字列を検索する際にnオプションを付けておくと,行番号を表示することができます.

grep -n '文字列' ファイル

ファイルから特定の文字列を含む行を抽出するには,aオプションを使います.

grep -a '文字列' ファイル

findコマンド

条件に適合するファイルを検索するにはfindコマンドで行うことができます.

更新時刻に基づくファイル検索

対象となるディレクトリ以下の階層で,7日以内に更新のあったディレクトリを調べるなら,

find 対象ディレクトリ -mtime -7 -type d

とします.

次は,カレントディレクトリで20分以上存在するファイルを見つける例です.

find . -mmin +20

複数ファイルで句読点を一括置換

次は,findコマンドによってカレントディレクトリ以下の階層のmdファイルを検索し,句読点をピリオドとコンマに変換する例です.

find . -name "*.md" | xargs -I {} sed -i -e "s/。/./g" {}
find . -name "*.md" | xargs -I {} sed -i -e "s/、/,/g" {}

複数ファイルでパーミッションを一括変更

カレントディレクトリ(.)以下の全てのディレクトリを755,全てのファイルを644にする例です.

find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +