Создание следующего доступного имени файла для шаблона (02-output.log и т. Д.)

Я могу использовать mktemp(1) в сценарии оболочки, чтобы сделать временный файл в каталоге с подходящим суффиксом и префиксом.

Есть ли команда, которая, учитывая шаблон (например, NN-output.log ), будет искать 01-output.log , а если это существует, возвратите 02-output.log (или следующий доступный номер)? Я хочу, чтобы команда «получила следующее последовательное доступное имя файла» без необходимости писать это в скрипте.

Я знаю, что могу использовать date -Iseconds или подобное, чтобы получить уникальные, увеличивающиеся, имена файлов, но есть ли что-нибудь, что приведет к более упрощенным возрастающим именам файлов?

Я знаю, что, вероятно, легко написать такую ​​программу, но прежде чем я это сделаю сам, я хочу посмотреть, кто-то уже сделал это.

Обновление Кто-то спрашивает: «Как скрипт знает шаблон?» Я предполагаю, что, как и mktemp, можно было бы дать шаблон программе. например «Дайте мне следующий файл с именем output-XX.log», и программа будет смотреть на X и заполнять 01 , искать этот файл и т. д.

One Solution collect form web for “Создание следующего доступного имени файла для шаблона (02-output.log и т. Д.)”

Ниже приведена функция оболочки, которая может использоваться с по крайней мере ksh и bash. Как отмечается в комментарии, сложно запрограммировать шаблон ввода из этого конкретного Вопроса; то есть формата «XX» (ровно два X), за которым следует что-то – не (что-то) -XX, как подразумевается в одной части вопроса.

Скрипт использует расширение параметра, чтобы удалить верхние XX, чтобы сохранить для последующей рекомбинации с ростом индекса. Затем он перебирает от 1 до 99, нулевое число, если оно ему нужно, затем ищет несуществование [ ! -f ... ] [ ! -f ... ] такого файла. Если он не существует, он печатает это имя файла и возвращается успешно ( return 0 ). Если он выходит из цикла, не найдя доступный файл, он выводит сообщение на stderr ( >&2 ), ничего не выводит на stdout и возвращается с неудачным кодом return 1 ( return 1 ).

 # hard-coded to expect an input pattern of XX(something) function rmktemp { pattern=$1 suffix=${pattern#XX} n=1 while [ $n -lt 100 ] do if [ $n -lt 10 ] then n="0${n}" fi tfile="${n}${suffix}" if [ ! -f "$tfile" ] then printf "%s\n" "$tfile" return 0 fi n=$((n+1)) done if [ $n -eq 100 ] then echo Could not find an unused file >&2 return 1 fi } 

Используйте его так:

 LOG=$(rmktemp XX-output.log) [ $? -eq 0 ] && echo stuff > "$LOG" 
  • Настройка прав доступа к файлам в сценарии bash
  • Я использую bash после этого испытания?
  • подсчеты совпадений и несоответствий
  • Использование chown $ USER: $ USER внутри сценария bash
  • Прикрепленное изображение отсутствует в почте Unix при прикреплении нескольких файлов
  • Быстрый метод разделения строки из текстового файла?
  • Сохранить количество строк, выводимых в переменную в сценарии оболочки, не потребляя выход
  • Функция проверки переменной BASH
  • Как переносить переменные из другого Makefile в сценарий оболочки
  • Rc.local не работает правильно команд
  • Инициировать скрипты. Различие загрузочной и стартовой деятельности
  • Linux и Unix - лучшая ОС в мире.