「ダウンロード」ボタンを押してダウンロードしてください。
ファイル名の「.txt」を「.sh」に変更して実行してください。
詳しい手順については以下をご覧ください。
スクリプトの使い方
#!/bin/bash
#連番複製_v001_1.sh
#■実行方法
#① 始めて実行する場合は「実行権限」が必要です。
#②「情報を見る」から「このアプリケーションで開く」項目で「ターミナル」を設定してください。
#不明点がある場合は以下にお問い合わせください!
#このスクリプトの制作者:西尾朱志
#連絡先メール:syushi2@gmail.com
#連絡先電話番号:080-5892-2893
#その他のスクリプトは「https://しゅし.com/scripts」でご覧いただけます。
# 実行確認のダイアログを表示
confirm=$(osascript -e 'tell application "System Events" to display dialog "コピー元のファイルを選択してください" buttons {"はい", "いいえ"} default button "はい" cancel button "いいえ"')
# ユーザーが「いいえ」を選択した場合はスクリプトを終了
if [ "$confirm" = "" ]; then
osascript -e 'display dialog "キャンセルされました" buttons {"OK"} default button 1'
exit 0
fi
# ファイル選択ダイアログを表示し、選択されたファイルのパスを取得
source_file=$(osascript -e 'POSIX path of (choose file with prompt "コピー元のファイルを選択してください")')
# ファイルの親ディレクトリを取得
source_dir=$(dirname "$source_file")
# ファイル名と拡張子を取得
filename=$(basename "$source_file")
extension="${filename##*.}"
basename="${filename%.*}"
# ファイル名から正規表現でパターンを抽出
# 例: "cat_t_001_lo.png" -> prefix="cat_t_", number="001", suffix="_lo"
if [[ "$basename" =~ (.*[^0-9])([0-9]+)([^0-9].*)?$ ]]; then
prefix="${BASH_REMATCH[1]}"
number="${BASH_REMATCH[2]}"
suffix="${BASH_REMATCH[3]}"
else
# ファイル名がパターンに一致しない場合のデフォルト値
prefix=""
number="001"
suffix=""
fi
# numberから桁数を取得
digits=${#number}
# numberを数値として扱い、次の連番を計算
start_num=$((10#$number + 1))
# ダイアログを表示して、連番より前の名前を入力(デフォルトは抽出されたprefix)
prefix=$(osascript -e "text returned of (display dialog \"連番より前の名前を入力してください\" & return & \"例:「prj_cat_」\" default answer \"$prefix\")")
# ダイアログを表示して、連番の桁数を入力(デフォルトは抽出された桁数)
digits=$(osascript -e "text returned of (display dialog \"連番の「桁数」を半角数字で入力してください\" default answer \"$digits\")")
# ダイアログを表示して、連番の最初の番号を入力(デフォルトは次の連番)
start_num=$(osascript -e "text returned of (display dialog \"連番の「最初の番号」を半角数字で入力してください\" default answer \"$start_num\")")
# ダイアログを表示して、連番の最後の番号を入力(最初の連番より大きい値を入力するまで繰り返し)
end_num=$(osascript -e 'tell application "System Events" to display dialog "連番の「最後の番号」を半角数字で入力してください" default answer ""' -e 'text returned of result')
while [[ "$end_num" -le "$start_num" ]]; do
end_num=$(osascript -e 'tell application "System Events" to display dialog "値は開始番号より大きくしてください" & return & "(開始番号: '"$start_num"')" default answer ""' -e 'text returned of result')
# ユーザーが「いいえ」を選択した場合はスクリプトを終了
if [ "$end_num" = "" ]; then
osascript -e 'display dialog "キャンセルされました" buttons {"OK"} default button 1'
exit 0
fi
done
# ダイアログを表示して、連番より後の名前を入力(デフォルトは抽出されたsuffix)
suffix=$(osascript -e "text returned of (display dialog \"連番より後の名前を入力してください\" & return & \"例:「_lo」\" default answer \"$suffix\")")
# 親フォルダの一つ上のディレクトリを取得
parent_dir=$(dirname "$source_dir")
# 連番の範囲でループ
for ((i=start_num; i<=end_num; i++)); do
# ゼロパディングされた連番を作成
padded_num=$(printf "%0${digits}d" "$i")
# 新しいファイル名とフォルダ名を作成
new_name="${prefix}${padded_num}${suffix}.${extension}"
new_dir="${parent_dir}/${prefix}${padded_num}${suffix}"
# フォルダを作成
mkdir -p "$new_dir"
# コピー先ファイルが存在しない場合にコピー
if [ ! -f "${new_dir}/${new_name}" ]; then
cp "$source_file" "${new_dir}/${new_name}"
else
echo "ファイル ${new_dir}/${new_name} が既に存在するためスキップします。"
fi
done
# 全て完了したことを示すダイアログを表示
osascript -e 'display dialog "全て完了しました。「ターミナル」は手動で閉じてください。" buttons {"OK"} default button 1'