[A-00062]Shellでディレクトリ内のファイルを読み込む

ディレクトリに存在するファイル全て読み込みして何かがしたいとなったというユースケースを想定したプログラムを記載しておく。

findコマンドでファイルだけを抜粋して、不要な部分を正規表現で除去したケースが下記。

ディレクトリ構造は以下の通り。

MacBook-Pro:filetest$ tree --dirsfirst
.
├── params
│   ├── copy_list.txt
│   └── list.txt
├── tocopy
│   ├── abcd0001.sql
│   ├── abcd0002.sql
│   ├── cbcd0012.sql
│   ├── hjkd0024.sql
│   └── uudd0015.sql
├── abcd0001.sql
├── abcd0002.sql
├── abcd0004.sql
├── cbcd0012.sql
├── copy_files.sh
├── create_files.sh
├── hhhh0023.sql
├── hjkd0024.sql
├── uudd0015.sql
└── ymca1022.sql

親ディレクト の各ファイルにはそれとわかるよう適当なコメントを入れておく。

MacBook-Pro:filetest$ echo "親ディレクトリのファイルです" >> abcd0001.sql 
MacBook-Pro:filetest$ echo "親ディレクトリのファイルです" >> abcd0002.sql 
MacBook-Pro:filetest$ echo "親ディレクトリのファイルです" >> cbcd0012.sql 
MacBook-Pro:filetest$ echo "親ディレクトリのファイルです" >> hjkd0024.sql 
MacBook-Pro:filetest$ echo "親ディレクトリのファイルです" >> uudd0015.sql

上記の通り、tocopyにあるファイルと同一のファイルが親ディレクトリにも存在している。tocopyに存在するファイル全ての名前を取得して、親ディレクトリにあるファイルの中身を見たいという場合は下記のようになる。

#!/bin/bash

for file in `find tocopy -type f | sed -e "s/tocopy\///"`;
do
  file_contents=$(cat ./$file)
  echo $file_contents
done

実行結果は下記のとおり

MacBook-Pro:filetest$ ./exec_files_from_tocopy.sh 
親ディレクトリのファイルです
親ディレクトリのファイルです
親ディレクトリのファイルです
親ディレクトリのファイルです
親ディレクトリのファイルです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*