Я полагаю, что сначала выполняется V2__description.sql
, а затем V2.001__*.sql
и пр., Потому что они логически будут применяться позже? Затем вы можете изменить их имена для сортировки (и изменить их обратно прямо после сортировки):
(
echo "V1__description.sql"
echo "V2.001__description.sql"
echo "V2.002__description.sql"
echo "V2__description.sql"
) | sed 's/\./_DOT_/g' | sort | sed 's/_DOT_/./g'
Это изменит все точки на _DOT_
для сортировки и снова вернет ее обратно.
Если вам нужно выполнить более сложные задачи (например, порядок сортировки знаков подчеркивания, тире, точек и плюсов должен быть +_-.
), вы можете изменить больше из них туда и сюда:
… | sed -e 's/_/_1UNDERSCORE_/g' \
-e 's/\+/_0PLUS_/g' \
-e 's/-/_2DASH_/g' \
-e 's/\./_3DOT_/g' \
| sort \
| sed -e 's/_3DOT_/\./g' \
-e 's/_2DASH_/-/g' \
-e 's/_0PLUS_/\+/g' \
-e 's/_1UNDERSCORE_/_/g'
Обратите внимание, что преобразование подчеркивания должно выполняться в первую очередь (и отменяется последним), чтобы не перепутать другие преобразованные специально обработанные символы, которые преобразовываются позже (и возвращаются раньше).