Перейдите файлы от самого нового к самому старому, верните первое совпадение.
stat --format '%y %n' *_MOVE |
sort -r |
cut -c37- |
xargs grep -l '<BILL_UID>[0-9][0-9][0-9][0-9][0-9]</BILL_UID>' |
head -n 1
Вызов stat
не является переносимым, но в моем Linux он выдает строки типа
2016-10-05 15:20:02.000000000 +0300 1onefile
2018-08-07 12:43:24.000000000 +0300 2another
, которые можно отсортировать лексически, чтобы упорядочить их по времени изменения, затем мы отбрасываем временные метки, которые мы использовали для сортировки, и сохраняем только имена файлов.
(Это не удастся, если имя файла содержит символ новой строки.обходные пути, но если вам действительно не нужно справляться с этой сложностью, давайте просто упомянем об этом.)
Весь конвейер завершается при выходе из head
, поэтому во избежание ненужного сканирования старых файлов (хотя некоторые дополнительные файлы реально будут иметь место)параллельно сканировался при остановке трубопровода).