💡 なぜ作ろうと思ったのか(背景)
日々の本番環境反映作業の中で、毎回このような手順を踏んでいました:
- リモートファイルを
hoge_bk.php
としてローカルに保存 - 差分を確認して改修分のみアップロード
- 作業完了後、バックアップフォルダへ手動でファイルを整理
特に3の作業が地味に面倒で、複数フォルダがあると非常に時間がかかる…。
そこで「コマンド1つでこの作業を自動化できないか?」と考えたのがきっかけです。
やってみた方法
まず「backup フォルダ名 課題名」で動かせるようスクリプトを作成。
backup.shという名前で保存。
SRCの箇所でバックアップ対象のフォルダを指定していますので適宜自分の環境に合ったものに変更してください(DESTも同様)
_bkの箇所で移動対象のファイルを識別しているのでこちらも適宜変更してください。
補足:
• _bk. にすることで「_bk付きの拡張子ファイル」を対象にしています
• mv を使って元ファイルを移動(コピーではない点は注意)
#!/bin/bash
# 引数チェック:第1引数がフォルダ名、第2引数が課題名
if [ -z "$1" ] || [ -z "$2" ]; then
echo "使い方: backup フォルダ名 課題名"
exit 1
fi
FOLDER_NAME="$1"
TITLE="$2"
TODAY=$(date +%Y%m%d)
SRC="$HOME/Documents/Projects/$FOLDER_NAME"
DEST="$HOME/Documents/backup/$FOLDER_NAME/${TODAY}_${TITLE}/"
# 指定フォルダの存在チェック
if [ ! -d "$SRC" ]; then
echo "フォルダが存在しません: $SRC"
exit 1
fi
# *_bk.* ファイルの検索
FOUND_FILES=$(find "$SRC" -type f -name '*_bk.*')
if [ -z "$FOUND_FILES" ]; then
echo "⚠️ バックアップ対象(*_bk.*)のファイルが見つかりませんでした。"
exit 1
else
mkdir -p "$DEST"
find "$SRC" -type f -name '*_bk.*' -exec mv {} "$DEST" \;
fi
# 成功・失敗のログ出力
if [ $? -eq 0 ]; then
echo "✅ バックアップ完了: $DEST"
else
echo "❌ バックアップ中にエラーが発生しました"
exit 1
fi
こちらで書いたものを/Users/[username]/binフォルダに入れる。
※binフォルダを作っていなかったら下記コードをターミナルで行うか手動で作成する。
# binフォルダを作成
mkdir -p ~/bin
# スクリプトを移動
mv backup.sh ~/bin/
# エイリアス設定
echo 'alias backup="~/bin/backup.sh"' >> ~/.zshrc
source ~/.zshrc
# 実行権限付与
chmod +x ~/bin/backup.sh
これでターミナルでbackup hoge fooを実行するとバックアップフォルダが作られそこに_bkファイルが移動する仕組みが出来上がりました。
まとめ
これで、今まで手間だったファイル整理がたった一行で完結できました。
作業時間の短縮だけでなく、ミスの削減にもつながりました。
bashやシェルスクリプトって難しそうな印象がありましたが、
実際に使ってみると、業務に直結する強力な武器になりますね
今後も作業の自動化や効率化をテーマに、いろんなツールを試していきたいと思います!
🙌 「こういう工夫もあるよ」「もっとこう書けるよ」などのアドバイスがあればぜひコメントください!