Файлы списка, которые происходят лексически после/больше, чем данный префикс (или, запустите скрипты обновления базы данных в надлежащем порядке),

tail работы с двоичными данными точно так же как с текстом. Если Вы хотите запуститься в самом начале файла, можно использовать tail -c +1 -f.

2
11.10.2011, 15:11
2 ответа

Начальная настройка: touch 01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql 09-quux.sql 10-lala.sql 99-omg.sql

Фактический код: curr=02; for file in ??-*.sql; do ver="${file:0:2}"; [ "$ver" -gt "$curr" ] && echo "$file"; done

Т.е. определите текущую версию, чтобы быть 02 и затем посмотрите на все файлы (globbing является алфавитным), выполняя их, если их префикс числа численно больше. Замена mysql (или что имеет Вас) для echo.

3
27.01.2020, 22:07
  • 1
    должен быть осторожным с недопустимыми восьмеричными значениями: [[ "08" -gt "07" ]] && echo y производит [[: 08: value too great for base (error token is "08") - Вы, вероятно, хотите придерживаться сравнения строк. –  glenn jackman 11.10.2011, 18:34
  • 2
    glenn jackman: хм, это - то, только если Вы используете [[ вместо [. Оба встроены, таким образом, я сразу не вижу преимущества использования [[ здесь. Я пропускаю что-то? –  janmoesen 11.10.2011, 22:32
  • 3
    я не понял, что они действуют по-другому в этом отношении. Основное преимущество [[ дополнительные операторы: == и != сделайте сопоставление с образцом стиля шарика и =~ делает соответствие regex. Никакое разделение слова не выполняется в [[, таким образом, существует меньше неожиданностей, если Вы забываете заключать переменные в кавычки. документация: gnu.org/software/bash/manual / … –  glenn jackman 11.10.2011, 22:53
  • 4
    , Если Вы действительно хотите использовать [[, можно сказать удару рассматривать числа как десятичное число независимо от продвижения 0: [[ "10#$ver" -gt "10#$curr" ]] –  glenn jackman 11.10.2011, 22:56
  • 5
    glenn jackman: спасибо, я знал о тех дополнительных функциях [[ (вот почему я задался вопросом, почему это было предпочтительно здесь), кроме основного спецификатора. Аккуратный! –  janmoesen 12.10.2011, 09:59

В zsh:

DB_VERSION=02
glob="<$((DB_VERSION+1))->"
for x in $~glob-*; do mysql <$x; done

<LOW-UP> оператор шарика соответствует целым числам в диапазоне. Можно только использовать литеральное целое число, не результат вычисления. Следовательно, мы сначала создаем шаблон шарика как значение параметра, затем используем этот параметр в качестве шаблона шарика благодаря ~ опция расширения параметра.

0
27.01.2020, 22:07

Теги

Похожие вопросы