Командная строка: создайте файл с новым именем файла, если имя файла уже существует

Я задавался вопросом, было ли это возможно, имеют команду, которая создает один файл, но каждый раз команда выполняется, это не перезаписало бы файл, созданный в предыдущем выполнении.

Например: touch test1.txt создал бы 1 названный файл test1.txt. Но в следующий раз, когда я выполняю его, я хотел бы, чтобы новый файл был назван test2.txt, или что-то как этот. Таким образом не перезаписывая уже существующий файл. В некотором роде это могло быть выполнено многократно без проблем.

Не поймите меня неправильно, я не пытаюсь создать несколько файлов с одной командой.

Заранее спасибо!

8
задан 18 October 2011 в 10:28

3 ответа

Самое легкое решение состояло бы в том, чтобы добавить метку времени к имени файла и не использовать единственную цифру.

Самый легкий метод для создания пустого файла был бы touch test$(date +%Y%m%d-%H%M%S) и это привело бы к названному файлу test20110802-170410. В 2-й раз test* получит более новую метку времени, таким образом, она приведет к 2 файлам.

9
ответ дан 23 November 2019 в 05:30

Я сомневаюсь, что общекомандное существует, чтобы сделать это, но можно думать о чем-то вроде этого:

create() {
  read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
  while true; do
    file="$prefix$number.$suffix"
    if [[ -e "$file" ]]; then
      ((number++))
    else
      touch "$file"
      break
    fi
  done
}

Входной параметр к функции разделяется в префиксе, числе, суффиксе, затем пока файл не существует, число увеличено. Найденный свободным слотом, файл создается с touch.

Механизм разделения должен быть адаптирован к Вашим потребностям, и различная проверка на ошибки должна быть добавлена.

5
ответ дан 23 November 2019 в 05:30

Если порядковые номера не требуются, то самый легкий путь состоит в том, чтобы использовать mktemp команда.

1
ответ дан 23 November 2019 в 05:30

Другие вопросы по тегам:

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