概要
使うときはあるけど、オプションや順番を考えるのが面倒。
そんな悩みをChatGPTの力を借りて解決です。
やったこと
- 対話式で圧縮するファイルやディレクトリを指定
- 圧縮先のディレクトリを対話で指定(何も指定しない場合はカレントディレクトリ)
- アーカイブファイルを対話で指定(何も指定しない場合はファイル/ディレクトリ名.$(date +%Y%m%d).zip)
- zipコマンドで圧縮。ディレクトリかを判別し、ディレクトリなら-rオプションをつける
という処理を行います。
スクリプト
- autozip
#!/bin/bash
# ユーザにファイル/ディレクトリの指定を求める関数
get_input() {
read -p "$1: " input
echo "$input"
}
# 対話式でファイル/ディレクトリの指定を取得
source_path=$(get_input "圧縮するファイルやディレクトリのパス")
# 対話式で圧縮先ディレクトリの指定を取得
destination_dir=$(get_input "圧縮先のディレクトリ(何も指定しない場合はカレントディレクトリ)")
destination_dir=${destination_dir:-"."}
# 対話式でアーカイブファイルの指定を取得
archive_name=$(get_input "アーカイブファイルの名前(何も指定しない場合はファイル/ディレクトリ名.\$(date +%Y%m%d).zip)")
archive_name=${archive_name:-"$(basename $source_path).$(date +%Y%m%d).zip"}
# ソースディレクトリに移動
cd "$(dirname "$source_path")" || exit
# zipコマンドで圧縮
if [ -d "$(basename "$source_path")" ]; then
# ディレクトリの場合は-rオプションを付けて圧縮
zip -r "$destination_dir/$archive_name" "$(basename "$source_path")"
else
# ファイルの場合は-rオプションなしで圧縮
zip "$destination_dir/$archive_name" "$(basename "$source_path")"
fi
echo "圧縮が完了しました。"
# カレントディレクトリに戻る
cd - || exit
作成後の処理
- 実行権付与
chmod +x autozip
- コマンド化
sudo chown root:root autozip && sudo mv autozip /usr/local/bin/autozip
実行結果
- パスが通っていることを確認
which autozip
→ /usr/local/bin/autozip
に表示されます。
- 実行確認
任意のディレクトリに移動し、
autozip
を実行。
これで、
- 対話式で圧縮するファイルやディレクトリを指定
- 圧縮先のディレクトリを対話で指定(何も指定しない場合はカレントディレクトリ)
- アーカイブファイルを対話で指定(何も指定しない場合はファイル/ディレクトリ名.$(date +%Y%m%d).zip)
- zipコマンドで圧縮。ディレクトリかを判別し、ディレクトリなら-rオプションをつける
が実行できました。