Macでbashファイルを作る
こんばんは、のえるです。
弊社エンジニアチームには「3回繰り返したら自動化する」というルールがあります。
これはルーチン化出来るものは可能な限り行い、よりクリエイティブな事に時間を使って欲しいという思いがあります。
そこで、今回はサンプルでbashファイルを作成して画像ファイルのコピーをする方法を記載してみます。
まず、今回のソースはこんな感じになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash # 現在のパスを取得 currentPath="`pwd`" # 同一階層のjpgファイル一覧を取得 for file in `find $currentPath -name "*.jpg" -print`; do # ファイル名などを取得 # 上からファイル名+拡張子、ファイル名、拡張子、ディレクトリを取得 fileNameExt="${file##*/}" fileName="${fileNameExt%.*}" ext="${file##*.}" dir="${file%/*}" # 同一ディレクトリのものだけに絞る if [ $(echo $dir | grep -e "^${currentPath}$") ]; then # 新しいファイル名を指定 newFileName="${fileName}_new.${ext}" # 別名としてコピーする `cp -p $file "${currentPath}/${newFileName}"` fi done echo '------------------------------' echo 'complete.' echo '------------------------------' |
一つ目のポイントは7行目です。
1 2 |
# 同一階層のjpgファイル一覧を取得 for file in `find $currentPath -name "*.jpg" -print`; do |
for文のループにファイル検索を渡しています。
これにより、ファイル検索した結果分だけループすることになります。
二つ目のポイントは17行目のif文です。
1 2 |
# 同一ディレクトリのものだけに絞る if [ $(echo $dir | grep -e "^${currentPath}$") ]; then |
for文の命令内で行っている検索は、下層ディレクトリも検索してしまうので、
ここで同一ディレクトリのものだけという判定を行っています。
あとは「cp」コマンドでファイルをコピーしてあげるという流れです。
そして最後のポイントは「このシェルスクリプトファイル自体」です。
Unix系を触ったことがある人ならもうお気づきかもしれませんが、
このファイルに「実行権限」を与えないと、シェルスクリプトとして動きません。
ですので「chmod」コマンドでこのシェルスクリプトに実行権限を与えましょう。
1 |
chmod 755 tool.sh |
あとは「ターミナル」から、作成したファイルを実行してあげるだけです。
1 |
$ ./tool.sh |
いかがですか?
これで実行すると、jpgファイルがあればコピーされていると思います。
シェルスクリプトが使えるようになると、他にもzipファイルを作ったり、
ディレクトリごと移動させたりすることも可能です。
これを期にいろいろ自動化させてみてはいかがでしょうか?
ではでは。
POPULAR
-
もきち2020.04.15
-
WebブラウザからWindowsアプリケーションを開く[追記あり]
のえる2020.01.22
のえる
Full-stack Developer