#!/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'