Расширение пути
После разделения слов, если не установлена опция -f
, bash сканирует каждое слово на наличие символов *
, ?
и [
. Если появляется один из этих символов, слово считается шаблоном, и заменяется отсортированным по алфавиту списком имен файлов, соответствующих шаблону.
source: man bash
Поскольку равно в алфавитном порядке перед , вы получите ожидаемый список.
Кроме того, формат данных, который используется в ваших именах файлов, также не сортируется. Представьте, что вы получите файл "21-Feb-2020 20: 01.log". Он будет указан перед всеми файлами с января. Всегда полезно использовать сортируемые форматы даты и времени. Типичным примером будет YYYYMMDDhhmm.log
, и, поскольку вы используете там счетчик последовательности, вы можете захотеть использовать имена файлов, такие как YYYYMMDDhhmm_nn.log
, где nn
- это число, начинающееся с 00
.
Мы могли бы придумать увлекательное правило, как приводить ваши файлы в порядок. Тем не менее, я бы посоветовал быстро переименовать ваши файлы:
for file in *.log; do
read date time seq <<<"${file%.log}"
file_new="$(printf "%s_%0.2d.log" "$(date -d "$date $time" '+%FT%H:%M')" "${seq}")"
mv "${file}" "${file_new}"
done
Вы также можете просто сделать мягкую ссылку на /path/to/tempdir
с таким именем.
И тогда вы можете сделать
cat *.log > full.log
примечание: Если вам нужно только объединить файлы одного дня, решение nullPointer сработает.