同じキーワードを含むファイルが存在するかチェックする方法　Shell

違うディレクトリファイルの中に、
同じキーワードを含むファイルの存在があるか、
チェックする方法です！

![19-06-17-11-00-56-869_deco.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433296/aae0fdc0-e8d4-ec52-292d-2ae93d113fad.jpeg)

D1、D2ファイルには、それぞれ.txtファイルも含まれていて、
キーワードの違うファイルも存在している例とします。

##作業内容
・/AAA/BBB/CCC/D1　ディレクトリ内の.prmファイルに含まれるキーワード
・/AAA/BBB/MMM/N1 ディレクトリ内の.datファイルに含まれるキーワード

それぞれのキーワードが一致するファイルの存在をチェックする


##作業手順
###①ファイルが入っているディレクトリの存在チェック
　・ディレクトリが存在する→存在確認表示、作業を続行
　・ディレクトリが存在しない→存在未確認表示、作業を中断
　
　※ディレクトリの存在確認の方法については、[こちら](https://qiita.com/akari_n/items/4714c85712107cb7f79f)で説明をしていますので、
　今回は省略させていただきます。

###②ファイルリスト取得
  ・/AAA/BBB/CCC/D1/ディレクトリ中の”.prm”ファイル
  ・/AAA/BBB/MMM/N1/ディレクトリ中の”.dat”ファイル

###③ファイルのキーワード取得
　③-1 /AAA/BBB/CCC/D1ディレクトリ内の.prmファイルの
　**6~8バイト目**のキーワードを取得
　例:AA001.ABC.prm → **ABC** (0バイト数からのカウントとする)

　③-2 /AAA/BBB/CCC/D2ディレクトリ内の.datファイルの
　**0~2バイト目**のキーワードを取得
　例:ABC.dat → **ABC** (0バイト数からのカウントとする)

###④同じキーワードを含むファイル名か、比較チェック
　同じ→存在確認表示:OK , ベース比較キーワード+ファイル名表示 = 比較キーワード+ファイル名表示
　違う→存在未確認表示:NG , ベース比較キーワード+ファイル名表示

```shell 
#初期設定
  #格納ディレクトリ
  DIR_prm ='/AAA/BBB/CCC/D1/'
  DIR_dat ='/AAA/BBB/MMM/N1/'

#ファイルリスト取得
  #".prm"ファイルリスト
  list_prm = $(ls ${DIR_prm} | grep ".prm")
  #".dat"ファイルリスト
  list_dat = $(ls ${DIR_dat} | grep ".dat")

#ファイルのキーワード取得(.prm D1内ファイルの数分に合わせて.dat N1ファイルも確認)
  #ファイル数分ループ(.prm D1)
  for file_prm in ${list_prm[@]}
  do
    #ファイル名抽出
　　file_name_prm = $(basename ${file_prm})
    #キーワード抽出 (6～8バイト目)
    file_key_prm = ${file_prm:6:8}
    
#   echo 'file_key_prm = ${file_key_prm} <${file_name_prm}>'
    chk_flg = 0

      #ファイル数分ループ(.dat N1)
      for file_dat in ${list_dat[@]}
      do
        #ファイル名抽出
　　    file_name_dat = $(basename ${file_dat})
        #キーワード抽出 (0～2バイト目)
        file_key_dat = ${file_dat:0:2}
    
#       echo 'file_key_dat = ${file_key_dat} <${file_name_dat}>'

　　　　#キーワード比較
       #一致する
       if ["${file_key_prm}" = "${file_key_dat}" ]:then
         echo "OK : prm-dat:${file_key_prm}<${file_name_prm}> = ${file_key_dat}<${file_name_dat}>"
         chk_flg = 1
       else
         echo "NO :  prm-dat:${file_key_prm}<${file_name_prm}>"
         break
       fi
  done
  echo "-----------------------------------------------------"
  #ファイルのキーワード取得(.dat N1内ファイルの数分に合わせて.prm D1ファイルも確認)
  #ファイル数分ループ(.dat N1)
  for file_dat in ${list_dat[@]}
  do
    #ファイル名抽出
　　file_name_dat = $(basename ${file_dat})
    #キーワード抽出 (6～8バイト目)
    file_key_dat = ${file_dat:0:2}
    
#   echo 'file_key_dat = ${file_key_dat} <${file_name_dat}>'
    chk_flg = 0

      #ファイル数分ループ(.prm D1)
      for file_prm in ${list_prm[@]}
      do
        #ファイル名抽出
　　    file_name_prm = $(basename ${file_prm})
        #キーワード抽出 (0～2バイト目)
        file_key_prm = ${file_prm:6:8}
    
#       echo 'file_key_prm = ${file_key_prm} <${file_name_prm}>'

　　　　#キーワード比較
       #一致する
       if ["${file_key_dat}" = "${file_key_prm}" ]:then
         echo "OK : dat-prm:${file_key_dat}<${file_name_dat}> = ${file_key_prm}<${file_name_prm}>"
         chk_flg = 1
         break
       fi
    done
　  #一致しない
　  if [ ${chk_flg} -eq 0]:then
　    echo "NO :  dat-prm:${file_key_dat}<${file_name_dat}>"
    fi
done
```

##説明

① `grep ".rog"`によって、".rog"を含むリストを作成し、
そのリストの中で"ABC"などのキーワードを含むファイルの存在をチェックしています。

② 片方のディレクトリファイル内(D1またはN1)のファイル数分
ループするようにしているので、D1ファイル数分ベースの確認が終わったら、
N1ファイル数分もループするようにしています。

③ `chk_flg` による判定 0 → 存在しない　1 → 存在する 

④ 個人的に結果が分かりやすいように、②のループベースが一つ終わったら、
　`-------の仕切りをつけています。