こんにちは。卓司です。
今回は特定のファイルを一か所のディレクトリに移動するシェルスクリプトについてまとめます。
1. 経緯
筆者は業務で複数webサーバや管理サーバ内に点在しているログファイルをバックアップサーバに転送する作業を数日毎に行っております。
定常的な作業ではあるですが、作業時間がバカにならなくて、『少しでも作業時間を短縮したい。』そう思い、作業の一部を自動化するシェルスクリプトを作成する事にしました。
2. 作成したシェルスクリプト
作成したシェルスクリプトは以下の通りです。
#/bin/sh
##############################################################
## ファイル名: moveFile.sh ##
## 処理内容 : 特定の拡張子のファイルを一か所にまとめる処理 ##
##############################################################
# 移動対象のファイル拡張子(*は取り除かないで)
ext='*.log'
# 特定拡張子ファイルを指定ディレクトリに移動する関数
move_file(){
motoDir=$1
sakiDir=$2
# 移動元ディレクトリの存在確認
if [ ! -d $motoDir ]; then
echo "移動元ディレクトリ[$motoDir]が存在しません。"
exit
fi
# 移動先ディレクトリの存在確認
if [ ! -d $sakiDir ]; then
echo "移動先ディレクトリ[$sakiDir]が存在しません。"
exit
fi
# シェルスクリプト内で対象ディレクトリへ移動
cd $motoDir
# 特定拡張子のファイル検索
for fName in `find . -name "$ext"`
do
# ファイル名取得
efName=`echo $fName | sed -e 's/^..*///'`
sakiFile=$sakiDir/$efName
# 移動前確認
if [ -f $sakiFile ]; then
echo "移動する前にファイル[$sakiDir]がすでに存在します。"
exit
fi
echo "[$fName]を[$sakiDir]に移動します。"
# ファイル移動
mv $fName $sakiFile
# 移動後確認
if [ ! -f $sakiFile ]; then
echo "移動した後のファイル[$sakiFile]が存在しません。"
exit
fi
done
}
echo "###############################################"
echo "## START ##"
echo "###############################################"
echo ""
# ファイルの移動関数呼び出し
# move_file 移動元ディレクトリ 移動先ディレクトリ
move_file /var/www/html/project/A /home/user/log
move_file /var/www/html/project/B /home/user/log
echo ""
echo "###############################################"
echo "## END ##"
echo "###############################################"
exit
3. まとめ
上記のシェルスクリプトを実行すると以下の図の通りの構成になります。
作成したシェルスクリプトを使って元々、30分程度かかっていた作業を5分程度で終わらせる事ができるようになりました。
長いスパンで見たらそれなりに作業時間は短縮できたと思います。
まだまだ、自動化できるところはたくさんあると思うので、その都度何かしらで対応していけたらなと思います。
補足ではありますが、筆者はこうゆう小さなツールを作っている時はわりと幸せです。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。