0 はじめに
・シェルスクリプトを利用して、
ある特定のディレクトリにあるファイル一覧から
検索したい文字列を検索しファイル出力するGrepツールです。
・検索する拡張子は、.sh、.java、.php、.jspです。
検索したい拡張子を変更したい場合、
シェルスクリプトのfindコマンドの箇所を検索したい拡張子に変更する
・実行権限がなかったりするファイルはエラーファイルに出力します。
・適当に作ったので、恐らく不備があるかもです
1 今回作成したシェルスクリプトのソース
grep_jikkou.sh
# !/bin/bash
WORK_DIR=/home/user/rinrin/grep_chousa
RESULT_DIR=${WORK_DIR}/result
# 実行時に指定する引数が2個より小さい場合は入力パラメータエラー
if [ $# -lt 2 ]; then
echo '入力パラメーターの引数が足りません 指定例:grep_jikkou.sh /apuri/souce 'rinrin' '
exit 1
fi
KENSAKU_DIR=$1
KENSAKU_MOJI=$2
NOW_TIME=`date +"%Y%m%d%H%M%S"`
OUTFILE=${RESULT_DIR}/`echo "${KENSAKU_DIR}" |sed -e "s/\//_/g"`"."`echo "${KENSAKU_MOJI}" |sed -e "s/\//_/g"`".${NOW_TIME}.txt"
WHOAMI=`whoami`
HOSTNAME=`hostname`
COMMAND="find ${KENSAKU_DIR} -follow -type f -regex '.*/\.[^.]*\|.*\.\(sh\|java\|php\|jsp\)' -print 2>>${OUTFILE}.err |xargs grep -i \"${KENSAKU_MOJI}\" 1>>${OUTFILE} 2>>${OUTFILE}.err"
echo "[${WHOAMI}@${HOSTNAME}]\$ ${COMMAND}" 1>>${OUTFILE} 2>>${OUTFILE}.err
find ${KENSAKU_DIR} -follow -type f -regex '.*/\.[^.]*\|.*\.\(sh\|java\|php\|jsp\)' -print 2>>${OUTFILE}.err |xargs grep -i "${KENSAKU_MOJI}" 1>>${OUTFILE} 2>>${OUTFILE}.err
exit 0
2 実行のやり方
# 1 フォルダーを作成する(シェルスクリプトのソースに変数WORK_DIRに記載しているフォルダーを作成する)
$ mkdir -p /home/user/rinrin/grep_chousa/result
# 2 シェルスクリプトのソースを作成して実行権限を付与する(作成する場所はどこでもいい)
$ cd /home/user/rinrin/grep_chousa/
$ vi grep_jikkou.sh
$ chmod 755 grep_jikkou.sh
# 3 引数を指定してシェルスクリプトを実行する
# 第1引数は、検索したいディレクトリ 第2引数は検索したい文字列を指定する
# 以下実行例です
$ ./grep_jikkou.sh /home/user/rinapuri/ 'rinrin'
3 一応動作確認を実施しました。(検索するディレクトリは、「/home/user/rinapuri」で検索する文字列は、「rinrin」で実施)
① 今回検索するアプリのディレクトリの構成とファイル一覧
# シェルスクリプトのディレクトリ構成
/home/user/rinrin/grep_chousa
|-grep_jikkou.sh
|-result
|-検索結果出力ファイル
|-検索結果エラー出力ファイル
# 検索するアプリのディレクトリ構成
/home/user/rinapuri
|-MojiAri.sh
|-MojiNashi.sh
|-MojiAri.java
|-MojiNashi.java
|-MojiAri.php
|-MojiNashi.php
|-MojiAri.jsp
|-MojiNashi.jsp
|-KengenNashi.java ※読み込み権限なしのファイル
|-MojiAriKakuchoushi.txt ※検索対象外の拡張子(検索文字あり)
|-MojiNashiKakuchoushi.txt ※検索対象外の拡張子(検索文字なし)
example
|-ExMojiAri.sh
|-ExMojiNashi.sh
|-ExMojiAri.java
|-ExMojiNashi.java
|-ExMojiAri.php
|-ExMojiNashi.php
|-ExMojiAri.jsp
|-ExMojiNashi.jsp
|-ExKengenNashi.java ※読み込み権限なしのファイル
|-ExMojiAriKakuchoushi.txt ※検索対象外の拡張子(検索文字あり)
|-ExMojiNashiKakuchoushi.txt ※検索対象外の拡張子(検索文字なし)
② 検索するアプリのファイル一覧の権限や中身
$ pwd
/home/user/rinapuri
# --------------------------権限--------------------------
$ ls -l
total 12
---------- 1 user user 0 Aug 13 09:58 KengenNashi.java
-rw-r--r-- 1 user user 19 Aug 13 09:54 MojiAri.java
-rw-r--r-- 1 user user 15 Aug 13 09:57 MojiAri.jsp
-rw-r--r-- 1 user user 21 Aug 13 09:56 MojiAri.php
-rw-r--r-- 1 user user 19 Aug 13 09:52 MojiAri.sh
-rw-r--r-- 1 user user 25 Aug 13 10:00 MojiAriKakuchoushi.txt
-rw-r--r-- 1 user user 22 Aug 13 09:54 MojiNashi.java
-rw-r--r-- 1 user user 58 Aug 13 09:58 MojiNashi.jsp
-rw-r--r-- 1 user user 0 Aug 13 09:56 MojiNashi.php
-rw-r--r-- 1 user user 18 Aug 13 09:53 MojiNashi.sh
-rw-r--r-- 1 user user 32 Aug 13 10:01 MojiNashiKakuchoushi.txt
drwxr-xr-x 2 user user 13 Aug 13 10:08 example
$ cd example
$ ls -l
total 10
---------- 1 user user 0 Aug 13 10:08 ExKengenNashi.java
-rw-r--r-- 1 user user 19 Aug 13 10:07 ExMojiAri.java
-rw-r--r-- 1 user user 15 Aug 13 10:07 ExMojiAri.jsp
-rw-r--r-- 1 user user 21 Aug 13 10:07 ExMojiAri.php
-rw-r--r-- 1 user user 19 Aug 13 10:07 ExMojiAri.sh
-rw-r--r-- 1 user user 25 Aug 13 10:07 ExMojiAriKakuchoushi.txt
-rw-r--r-- 1 user user 22 Aug 13 10:07 ExMojiNashi.java
-rw-r--r-- 1 user user 58 Aug 13 10:07 ExMojiNashi.jsp
-rw-r--r-- 1 user user 0 Aug 13 10:07 ExMojiNashi.php
-rw-r--r-- 1 user user 18 Aug 13 10:07 ExMojiNashi.sh
-rw-r--r-- 1 user user 32 Aug 13 10:07 ExMojiNashiKakuchoushi.txt
# --------------------------ファイルの中身--------------------------
$ pwd
/home/user/rinapuri
$ cat KengenNashi.java
cat: KengenNashi.java: Permission denied
$ cat MojiAri.sh
aaa
rinrin
ccc
rin
$ cat MojiAri.java
aaa
rinrin
ccc
rin
$ cat MojiAri.jsp
rinrin
kkkkkkk
$ cat MojiAri.php
ffffff
ggggg
trinrin
$ cat MojiAriKakuchoushi.txt
dddddddd
rinrin ggggggg
$ cat MojiNashi.php
$ cat MojiNashi.sh
aaaa
kkkk
rin
jjj
$ cat MojiNashi.java
cccccc
lllllll
ggggg
$ cat MojiNashi.jsp
fdsfdsfsdfsdfsdfsfddsf
fsdfdsfsdfsdfsdfrrin
gfgdfgsdfgsfg
$ cat MojiNashiKakuchoushi.txt
ffffffffff
lllllllll
nnnnnnnnn
$ cd cd example/
$ cat ExKengenNashi.java
cat: ExKengenNashi.java: Permission denied
$ cat ExMojiAri.sh
aaa
rinrin
ccc
rin
$ cat ExMojiAri.java
aaa
rinrin
ccc
rin
$ cat ExMojiAri.jsp
rinrin
kkkkkkk
$ cat ExMojiAri.php
ffffff
ggggg
trinrin
$ cat ExMojiAriKakuchoushi.txt
dddddddd
rinrin ggggggg
$ cat ExMojiNashi.php
$ cat ExMojiNashi.sh
aaaa
kkkk
rin
jjj
$ cat ExMojiNashi.java
cccccc
lllllll
ggggg
$ cat ExMojiNashi.jsp
fdsfdsfsdfsdfsdfsfddsf
fsdfdsfsdfsdfsdfrrin
gfgdfgsdfgsfg
$ cat ExMojiNashiKakuchoushi.txt
ffffffffff
lllllllll
nnnnnnnnn
③ テスト実行
$ cd /home/user/rinrin/grep_chousa/
$ chmod 755 grep_jikkou.sh
$ ./grep_jikkou.sh /home/user/rinapuri 'rinrin'
④ テスト結果確認
$ cd /home/user/rinrin/grep_chousa/result
$ ls -l
total 2
-rw-r--r-- 1 user user 793 Aug 13 10:49 _home_user_rinapuri.rinrin.20210813104949.txt
-rw-r--r-- 1 user user 134 Aug 13 10:49 _home_user_rinapuri.rinrin.20210813104949.txt.err
$ cat _home_user_rinapuri.rinrin.20210813104949.txt ※実行正常結果
# 【解説】実行コマンド↓↓
[user@project-fb558494-65b0-4172-94b0-83c3ba4e7345]$ find /home/user/rinapuri -follow -type f -regex '.*/\.[^.]*\|.*\.\(sh\|java\|php\|jsp\)' -print 2>>/home/user/rinrin/grep_chousa/result/_home_user_rinapuri.rinrin.20210813104949.txt.err |xargs grep -i "rinrin" 1>>/home/user/rinrin/grep_chousa/result/_home_user_rinapuri.rinrin.20210813104949.txt 2>>/home/user/rinrin/grep_chousa/result/_home_user_rinapuri.rinrin.20210813104949.txt.err
# 【解説】実行結果↓↓
/home/user/rinapuri/MojiAri.sh:rinrin
/home/user/rinapuri/MojiAri.java:rinrin
/home/user/rinapuri/MojiAri.jsp:rinrin
/home/user/rinapuri/MojiAri.php:trinrin
/home/user/rinapuri/example/ExMojiAri.php:trinrin
/home/user/rinapuri/example/ExMojiAri.java:rinrin
/home/user/rinapuri/example/ExMojiAri.jsp:rinrin
/home/user/rinapuri/example/ExMojiAri.sh:rinrin
$ cat _home_user_rinapuri.rinrin.20210813104949.txt.err ※実行エラー結果
grep: /home/user/rinapuri/KengenNashi.java: Permission denied
grep: /home/user/rinapuri/example/ExKengenNashi.java: Permission denied
4 一応引数エラーの動作確認も実施しました。
① テスト実行
$ cd /home/user/rinrin/grep_chousa/
$ chmod 755 grep_jikkou.sh
$ ./grep_jikkou.sh /home/user/rinapuri
入力パラメーターの引数が足りません 指定例:grep_jikkou.sh /apuri/souce rinrin
5 egrepコマンドで実行する場合は、今回作成したシェルスクリプトのソースのgrepコマンドの箇所をegrepコマンドに変えて実施する
egrep_jikkou.sh
# !/bin/bash
WORK_DIR=/home/user/rinrin/grep_chousa
RESULT_DIR=${WORK_DIR}/result
# 実行時に指定する引数が2個より小さい場合は入力パラメータエラー
if [ $# -lt 2 ]; then
echo '入力パラメーターの引数が足りません 指定例:grep_jikkou.sh /apuri/souce 'rinrin' '
exit 1
fi
KENSAKU_DIR=$1
KENSAKU_MOJI=$2
NOW_TIME=`date +"%Y%m%d%H%M%S"`
OUTFILE=${RESULT_DIR}/`echo "${KENSAKU_DIR}" |sed -e "s/\//_/g"`"."`echo "${KENSAKU_MOJI}" |sed -e "s/\//_/g"`".${NOW_TIME}.txt"
WHOAMI=`whoami`
HOSTNAME=`hostname`
COMMAND="find ${KENSAKU_DIR} -follow -type f -regex '.*/\.[^.]*\|.*\.\(sh\|java\|php\|jsp\)' -print 2>>${OUTFILE}.err |xargs egrep -i \"${KENSAKU_MOJI}\" 1>>${OUTFILE} 2>>${OUTFILE}.err"
echo "[${WHOAMI}@${HOSTNAME}]\$ ${COMMAND}" 1>>${OUTFILE} 2>>${OUTFILE}.err
find ${KENSAKU_DIR} -follow -type f -regex '.*/\.[^.]*\|.*\.\(sh\|java\|php\|jsp\)' -print 2>>${OUTFILE}.err |xargs egrep -i "${KENSAKU_MOJI}" 1>>${OUTFILE} 2>>${OUTFILE}.err
exit 0