@@ -11,6 +11,53 @@ set -e
1111# For example:
1212# /mnt/disks/mongodb_dump_fs/dump/google/01_match/w61_serial_110_to_119/s115_to_s119_r00/match
1313# /mnt/disks/mongodb_dump_fs/dump/google/02_align/w61_serial_090_to_099/s094_r00/render
14+ #
15+ # Optional parameters (if omitted, you will be prompted interactively):
16+ # --db <render|match>
17+ # --stage <00_par|01_match|02_align|03_ic2d_nc4_hist_rs0p5|timestamp>
18+ # --project <w61_serial_NNN_to_NNN>
19+ # --slab-group <slab-group>
20+ # --pattern <collection-pattern-regex>
21+
22+ # ----------------------------------------------------------------------------
23+ # Parse optional named parameters
24+
25+ ARG_DB=" "
26+ ARG_STAGE=" "
27+ ARG_PROJECT=" "
28+ ARG_SLAB_GROUP=" "
29+ ARG_PATTERN=" "
30+
31+ while [[ $# -gt 0 ]]; do
32+ case " ${1} " in
33+ --db)
34+ ARG_DB=" ${2:? ' --db requires a value' } "
35+ shift 2
36+ ;;
37+ --stage)
38+ ARG_STAGE=" ${2:? ' --stage requires a value' } "
39+ shift 2
40+ ;;
41+ --project)
42+ ARG_PROJECT=" ${2:? ' --project requires a value' } "
43+ shift 2
44+ ;;
45+ --slab-group)
46+ ARG_SLAB_GROUP=" ${2:? ' --slab-group requires a value' } "
47+ shift 2
48+ ;;
49+ --pattern)
50+ ARG_PATTERN=" ${2:? ' --pattern requires a value' } "
51+ shift 2
52+ ;;
53+ * )
54+ echo " WARNING: unrecognized parameter '${1} ' ignored"
55+ shift
56+ ;;
57+ esac
58+ done
59+
60+ # ----------------------------------------------------------------------------
1461
1562BASE_DUMP_DIR=" /mnt/disks/mongodb_dump_fs/dump"
1663
@@ -19,66 +66,128 @@ if [ ! -d "${BASE_DUMP_DIR}" ]; then
1966 exit 1
2067fi
2168
22- echo "
23- Select database:"
24- select DB in " render" " match" ; do
25- case " ${DB} " in
26- render|match) break ;;
27- * ) echo " Invalid selection, please enter 1 or 2." ;;
69+ # ----------------------------------------------------------------------------
70+ # Resolve DB
71+
72+ if [[ -n " ${ARG_DB} " ]]; then
73+ case " ${ARG_DB} " in
74+ render|match) DB=" ${ARG_DB} " ;;
75+ * ) echo " Invalid --db value '${ARG_DB} ' entered, please select from the list." ; ARG_DB=" " ;;
2876 esac
29- done
77+ fi
78+ if [[ -z " ${ARG_DB} " && -z " ${DB} " ]]; then
79+ echo "
80+ Select database:"
81+ select DB in " render" " match" ; do
82+ case " ${DB} " in
83+ render|match) break ;;
84+ * ) echo " Invalid selection, please enter 1 or 2." ;;
85+ esac
86+ done
87+ fi
88+
89+ # ----------------------------------------------------------------------------
90+ # Resolve STAGE
3091
3192LOCATION=" google"
3293
33- echo "
34- Select stage:"
35- select STAGE_CHOICE in " 00_par" " 01_match" " 02_align" " 03_ic2d_nc4_hist_rs0p5" " timestamp" ; do
36- case " ${STAGE_CHOICE} " in
94+ if [[ -n " ${ARG_STAGE} " ]]; then
95+ case " ${ARG_STAGE} " in
3796 00_par|01_match|02_align|03_ic2d_nc4_hist_rs0p5)
38- STAGE=" ${STAGE_CHOICE} "
39- break
97+ STAGE=" ${ARG_STAGE} "
4098 ;;
4199 timestamp)
42100 STAGE=$( date +" %Y%m%d_%H%M%S" )
43- break
44101 ;;
45- * ) echo " Invalid selection, please enter a number from the list." ;;
102+ * )
103+ echo " Invalid --stage value '${ARG_STAGE} ' entered, please select from the list."
104+ ARG_STAGE=" "
105+ ;;
46106 esac
47- done
107+ fi
108+ if [[ -z " ${ARG_STAGE} " && -z " ${STAGE} " ]]; then
109+ echo "
110+ Select stage:"
111+ select STAGE_CHOICE in " 00_par" " 01_match" " 02_align" " 03_ic2d_nc4_hist_rs0p5" " timestamp" ; do
112+ case " ${STAGE_CHOICE} " in
113+ 00_par|01_match|02_align|03_ic2d_nc4_hist_rs0p5)
114+ STAGE=" ${STAGE_CHOICE} "
115+ break
116+ ;;
117+ timestamp)
118+ STAGE=$( date +" %Y%m%d_%H%M%S" )
119+ break
120+ ;;
121+ * ) echo " Invalid selection, please enter a number from the list." ;;
122+ esac
123+ done
124+ fi
48125
49- echo "
126+ # ----------------------------------------------------------------------------
127+ # Resolve PROJECT
128+
129+ if [[ -n " ${ARG_PROJECT} " ]]; then
130+ PROJECT=" ${ARG_PROJECT} "
131+ else
132+ echo "
50133Select project:"
51- PROJECTS=()
52- for i in $( seq 0 10 150) ; do
53- PROJECTS+=(" $( printf " w61_serial_%03d_to_%03d" " $i " " $(( i+ 9 )) " ) " )
54- done
55- select PROJECT in " ${PROJECTS[@]} " ; do
56- if [[ -n " ${PROJECT} " ]]; then
57- break
58- else
59- echo " Invalid selection, please enter a number from the list."
60- fi
61- done
134+ PROJECTS=()
135+ for i in $( seq 0 10 150) ; do
136+ PROJECTS+=(" $( printf " w61_serial_%03d_to_%03d" " $i " " $(( i+ 9 )) " ) " )
137+ done
138+ select PROJECT in " ${PROJECTS[@]} " ; do
139+ if [[ -n " ${PROJECT} " ]]; then
140+ break
141+ else
142+ echo " Invalid selection, please enter a number from the list."
143+ fi
144+ done
145+ fi
62146
63- echo "
147+ # ----------------------------------------------------------------------------
148+ # Resolve SLAB_GROUP
149+
150+ if [[ -n " ${ARG_SLAB_GROUP} " ]]; then
151+ SLAB_GROUP=" ${ARG_SLAB_GROUP} "
152+ fi
153+ if [[ -z " ${SLAB_GROUP} " ]]; then
154+ echo "
64155Enter slab-group (e.g. s115_to_s119_r00 s094_r00 20260421_test ):"
65- while true ; do
66- read -rp " Slab-group: " SLAB_GROUP
67- if [[ -n " ${SLAB_GROUP} " ]]; then
68- break
69- fi
70- echo " Slab-group must not be empty."
71- done
156+ while true ; do
157+ read -rp " Slab-group: " SLAB_GROUP
158+ if [[ -n " ${SLAB_GROUP} " ]]; then
159+ break
160+ fi
161+ echo " Slab-group must not be empty."
162+ done
163+ fi
72164
73- echo "
165+ # ----------------------------------------------------------------------------
166+ # Resolve COLLECTION_PATTERN
167+
168+ if [[ -n " ${ARG_PATTERN} " ]]; then
169+ COLLECTION_PATTERN=" ${ARG_PATTERN} "
170+ else
171+ echo "
74172Enter collection pattern regex (e.g. .*_par_.* .*_s11[5-9]_.* .*align.* ):"
75- while true ; do
76- read -rp " Pattern: " COLLECTION_PATTERN
77- if [[ -n " ${COLLECTION_PATTERN} " ]]; then
78- break
79- fi
80- echo " Pattern must not be empty."
81- done
173+ while true ; do
174+ read -rp " Pattern: " COLLECTION_PATTERN
175+ if [[ -n " ${COLLECTION_PATTERN} " ]]; then
176+ break
177+ fi
178+ echo " Pattern must not be empty."
179+ done
180+ fi
181+
182+ # ----------------------------------------------------------------------------
183+ # Pad COLLECTION_PATTERN with .* anchors if not already anchored
184+
185+ if [[ " ${COLLECTION_PATTERN} " != ^* ]]; then
186+ COLLECTION_PATTERN=" .*${COLLECTION_PATTERN} "
187+ fi
188+ if [[ " ${COLLECTION_PATTERN} " != * $ ]]; then
189+ COLLECTION_PATTERN=" ${COLLECTION_PATTERN} .*"
190+ fi
82191
83192# ----------------------------------------------------------------------------
84193# Build and validate the target dump directory
0 commit comments