Найдите и скопируйте два последних файла, добавленных в каталог с определенным форматом.

В настоящее время я пишу скрипт ksh, который будет запускаться каждые 5 минут. Я хочу выбрать два последних добавленных файла в каталоге, которые имеют определенный формат. Формат файла должен быть: OUS_*_*_*.html. Затем файлы должны быть скопированы в каталог назначения.

Я предполагаю, что могу использовать поиск, но я использую HP-UX, и он не поддерживает параметры -amin, -cmin, -mmin. Кто-нибудь знает, как я могу реализовать эту функциональность?

Редактировать 1: я обнаружил следующие команды, каждая из которых должна возвращать один самый новый файл, но в списке используется более одного файла:

ls -Art | tail -n 1
ls -t | head -n1

Правка 2: я вижу, как должны работать функциональные возможности этих команд, но ls -t перечисляет файлы в формате таблицы, и выбор первой строки фактически выбирает три отдельных имени файла. Я попытался использовать ls -lt, но теперь первая строка представляет собой строку total 112, за которой следуют имена файлов вместе с их правами доступа, отметкой времени и т. д.

Изменить 3: я обнаружил, что параметр -1 (цифра 1, а не l) предоставляет список только с именами файлов. Используя команду ls -1t | head -n 2, я смог получить список двух самых новых файлов.

Вопрос. Можно ли ограничить команду ls только поиском файлов в упомянутом ранее формате?


person Marcus Koz    schedule 20.02.2015    source источник
comment
Даже в худшем случае на ум приходит использование ls -t | head -2. Наверняка это доступно на HP-UX?   -  person Joseph Myers    schedule 20.02.2015
comment
Спасибо за быстрый ответ. Эти команды доступны, однако при выполнении команд в тестовом каталоге отображаются 6 из 8 файлов. @ДжозефМайерс   -  person Marcus Koz    schedule 20.02.2015
comment
@JosephMyers Не могли бы вы расширить свою команду, чтобы вывести список и скопировать два самых последних файла, соответствующих определенному формату?   -  person Marcus Koz    schedule 23.02.2015
comment
Я бы хотел, но я даю только те ответы, которые, как я знаю, сработают. Я не знаком со средой HP-UX, только со многими другими вариантами Unix и Linux. Например, если бы я работал в ветке Debian/Ubuntu Linux, я бы использовал ls -t | head -2 | xargs cp -it TargetDir и покончил с этим. Но, например, флаг -t недоступен во FreeBSD. И, насколько я знаю, сам xargs может даже не быть на HP-UX. Даже синтаксис head и tail в вашей системе отличается. Так что используйте пример, который я упомянул, и посмотрите, сможете ли вы с ним работать. Если решишь, можешь написать ответ!   -  person Joseph Myers    schedule 23.02.2015
comment
Ну, на самом деле, поскольку вы используете только два файла и предполагаете, что в них нет опасных символов или пробелов, вы можете использовать деления для расширения, которые должны быть кросс-платформенными (но могут и не быть! Я не знаю сейчас HP-UX). cp -i `ls -1t | head -n 2` TargetDirectory   -  person Joseph Myers    schedule 23.02.2015


Ответы (1)


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

ls -1t $fileNameFormat | head -n 2
person Marcus Koz    schedule 25.02.2015