[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
親ディレクトリのファイルです
親ディレクトリのファイルです
親ディレクトリのファイルです
親ディレクトリのファイルです
親ディレクトリのファイルです
コメントを残す