Найти последний файл в каталоге, конец имени которого совпадает со строкой

Найти последний файл в каталоге, конец имени которого совпадает со строкой

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

Этот каталог может содержать несколько наборов файлов, которые соответствуют формату;

YYYYMMDD_##_user_filename.json

Таким образом, пример папки может содержать следующее:

20161021_01_test_parameters.json
20161021_01_test_stack.json
20161021_02_test_parameters.json
20161021_02_test_stack.json
20161022_03_test_parameters.json
20161025_04_test_parameters.json
20161025_04_test_stack.json

В этом случае мне нужно, чтобы скрипт считывал все файлы, заканчивающиеся на , parameters.jsonа затем сортировал их по номеру версии (01, 02 и т. д.), чтобы определить, какой из них последний в последовательности. Затем этот файл следует скопировать в ту же папку, используя следующий номер версии. Для этой цели дата не имеет значения, и вы можете предположить, что дублирующихся номеров версий никогда не будет.

Я использовал if [ -e $1/*"parameters.json" ]; then cp $1/*"parameters.json" "$FILENAME"_parameters.json(где $1находится каталог, в который перемещаются эти файлы - важно, потому что скрипт находится за пределами каталогов, с которыми нужно работать, и $FILENAMEпредставляет собой просто переменную для расчета местоположения, даты, номера версии и т. д.), но, конечно, это ничего не делает для поиска самой последней версии.

решение1

Поскольку число, по которому вы хотите выполнить сортировку, всегда находится во втором поле, разделенном подчеркиванием, вы должны иметь возможность использовать что-то вроде

find path/to/dir/ -maxdepth 1 -name '*parameters.json' | sort -t_ -nk2,2 | tail -n1

Если вам необходимо обработать возможность появления в именах файлов символов новой строки, и ваши основные утилиты поддерживают это, вы можете сделать всю команду с разделителями null, например:

find path/to/dir/ -maxdepth 1 -name '*parameters.json' -print0 | sort -zt_ -nk2,2 | tail -zn1

Связанный контент