Как проверить файл с числовым именем и, если он существует, скопировать его с новым именем, используя следующий порядковый номер

Сначала я хочу извиниться за недостаток знаний; это буквально мой первый скрипт bash, и мои знания в Linux в основном отсутствуют. Пояснительные ответы были бы высоко оценены; Я хотел бы узнать, почему не просто как.

Я пытаюсь написать сценарий для автоматизации утомительного процесса, который нужно делать несколько раз в день. Короче говоря, этот скрипт должен подготовить набор файлов на основе определенных требований. Сценарий должен либо переместить файл шаблона, либо присвоить ему номер версии, либо скопировать существующий файл с использованием нового номера версии на основе того, что находится внутри одного конкретного каталога (например, создать, если пусто, скопировать, если есть что-то там).

В качестве примера можно назвать файл

ГГГГММДД _ ## _ username_testfile.json

где номер ## (номер версии) должен быть 01 для первого создания, затем 02 для копии, 03 для копии после этого и т. д. В одном каталоге может содержаться более 10+ этих файлов, все с разными датами и последовательными номера версий, а также другие файлы с использованием того же формата, но заканчивающиеся чем-то иным, чем testfile.json

Кажется, я не могу найти способ взглянуть на скрипт в каталоге «test» для файла, заканчивающегося в файле testfile.json с наивысшим номером версии, и если он найден, извлеките номер версии в качестве переменной / параметра, который я могу пройти обратно в последовательность cp.

На этом этапе я даже не знаю, какую команду использовать; Интернет предлагает все: от grep до awk до листинга и сортировки … крутит головой!

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

One Solution collect form web for “Как проверить файл с числовым именем и, если он существует, скопировать его с новым именем, используя следующий порядковый номер”

Давайте разложим его на несколько шагов.

Мы собираемся написать функцию, которая вернет следующее число. Мы будем стремиться к простоте, а не к максимальной эффективности

Вам нужно указать имя каталога

Вам нужно предоставить ему testfile.json части имени файла

Нам нужно найти все файлы в этом каталоге, которые заканчиваются этим окончанием.

Параметры передаются в функцию с использованием $ 1, $ 2 и т. Д.

 getnum(){ ls "$1" | grep "$2\$" } 

Используйте cut, чтобы вытащить только второе поле, используя _ в качестве разделителя. (Заметьте, что если бы я шел, я бы использовал sed вместо grep и cut, другие могли бы использовать awk, но мы собираемся для простоты здесь).

 getnum() { ls "$1" | grep "$2\$" | cut -d_ -f 2 } 

Используйте сортировку для их сортировки в цифровом виде

 getnum() { ls "$1" | grep "$2\$" | cut -d_ -f 2 | sort -n } 

Используйте голову, чтобы получить только первое значение

  getnum() { ls "$1" | grep "$2\$" | cut -d_ -f 2 | sort -n | head -1 } 

Оберните это, чтобы мы получили значение в локальной переменной

 getnum() { local oldnum=$(ls "$1" | grep "$2\$" | cut -d_ -f 2 | sort -n | head -1) } 

Если бы не было значений, установите старое значение равным 0. Распечатайте 2-значное число, которое является еще одним из старого.

  getnum() { local oldnum=$(ls "$1" | grep "$2\$" | cut -d_ -f 2 | sort -n | head -1) if [ "$oldnum" = "" ] then oldnum=0 fi printf "%02d\n" $(($oldnum+1)) } 

Обратите внимание, что я мог бы пропустить тест для oldnum, который не будет установлен, поскольку $((oldnum+1)) будет расширяться до $((+1)) в этом случае. Я также могу использовать выражения типа $ (($ {oldnum: -0} +1)), обратитесь к руководствам за дополнительной информацией.

Затем вы можете использовать такую ​​функцию

  dir=somewhere/logs ext=testfile.json cp template "$dir/$(date +%Y%m%d_)$(getnum "$dir" "$ext")_$USER_$ext" 
  • Найти в тексте все слова, которые появляются 10 или более раз
  • Как отсортировать файл на основе раздела поля
  • Как численный сортировать по последнему столбцу?
  • Использование сортировки GNU с несколькими ключами, текстом и цифрами
  • Команда вроде «paste - -», но отсортированная в алфавитном порядке
  • Проблема сортировки нескольких столбцов Unix
  • Сортировка выровненных столбцов
  • Группировка сортировки непрерывных абзацев (разделенных пустой строкой)?
  • Сортировка каталогов и файлов в каждом каталоге в порядке возрастания и экспорт данных в csv
  • Числовая сортировка файлов
  • Сортировка по размеру
  • Linux и Unix - лучшая ОС в мире.