[A-00061]Shellでファイルリストから指定されたファイルに対してコマンド実行する
シェルで外部のファイルリストから指定されたファイルを読み込み、そのファイルに対してコマンドを実行する場合の方法を記載しておく。
・ファイルリストから読み込んだファイルを作成する
対象ファイルを作成します。
ディレクトリ構成は下記のとおり.list.txtにファイル名が記載されています。
MacBook-Pro:test$ tree filetest
filetest
├── params
│   └── list.txt
└── tocopyMacBook-Pro:test$ cat filetest/params/list.txt 
abcd0001.sql
abcd0002.sql
abcd0004.sql
cbcd0012.sql
hjkd0024.sql
hhhh0023.sql
uudd0015.sql
ymca1022.sql下記のスクリプトで一括でファイルを作成します。テキストファイルから読み込む下記のように記載します。
#!/bin/bash
while read file
do
   touch $file && chmod 777 $file
   echo $file" is created."
done < ./params/list.txt
exit 0MacBook-Pro:filetest$ ./create_files.sh 
abcd0001.sql is created.
abcd0002.sql is created.
abcd0004.sql is created.
cbcd0012.sql is created.
hjkd0024.sql is created.
hhhh0023.sql is created.
uudd0015.sql is created.
ymca1022.sql is created.下記のとおり、ファイルが作成されました。
MacBook-Pro:filetest$ tree --dirsfirst
.
├── params
│   └── list.txt
├── tocopy
├── abcd0001.sql
├── abcd0002.sql
├── abcd0004.sql
├── cbcd0012.sql
├── create_files.sh
├── hhhh0023.sql
├── hjkd0024.sql
├── uudd0015.sql
└── ymca1022.sql・ファイルリストから読み込んだファイルをコピーする
次のユースケースはファイルリストから読み込んだファイルを検索して存在したら[tocopy]ディレクトリにコピーするという処理です。
新しいパラメータファイルを作成します。末尾9で記載されるファイルは存在しないファイルです。
MacBook-Pro:params$ cat copy_list.txt 
abcd0001.sql
abcd0002.sql
abcd9999.sql
cbcd0012.sql
hjkd0024.sql
hhhh9999.sql
uudd0015.sql
ymca1999.sql#!/bin/bash
while read file
do
  if [ -e ./$file ];
   then
     cp ./$file ./tocopy/$file
     echo $file" is copied."
   else
     echo $file" is not exist."
  fi
done < ./params/copy_list.txt下記が実行結果になります。
MacBook-Pro:filetest$ ./copy_files.sh 
abcd0001.sql is copied.
abcd0002.sql is copied.
abcd9999.sql is not exist.
cbcd0012.sql is copied.
hjkd0024.sql is copied.
hhhh9999.sql is not exist.
uudd0015.sql is copied.
ymca1999.sql is not exist.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
コメントを残す