Сложная задача - получить файлы в порядке убывания, и ваша спецификация немного неясна, что вы подразумеваете под этим. Например, если у вас есть youyou.log.32 и youyou.log.4 - какой из них должен стоять первым? Если вас интересует строгий порядок символов, вы можете использовать ls
, чтобы получить правильно отсортированный список (со всеми подводными камнями ls
), т.е.
# bash
cat $(ls -r youyou.log.[0-9]*) >youyou.complete.log
или вы можете переключиться с bash на zsh, где генерация файла может быть выполнена с помощью сортировки.
Пример:
# zsh
cat youyou.log.[0-9]*(On) >youyou.complete.log
Сортировка (On)
по убыванию по названию. Это отсортировало бы youyou.log.32 после youyou.log.4. Если вы можете организовать, чтобы файлы журналов имели подходящую временную метку, использование (Om)
вместо (On)
приведет к сортировке по убыванию по времени модификации.
Если у вас нет метки времени, но вы хотите отсортировать файлы «по номерам», то есть youyou.log.32 раньше, чем youyou.log.4, потому что 4 меньше 32, лучшее решение, которое я могу придумать будет использовать sort
:
# bash
cat $(echo youyou.log.[0-9]*|fmt -w 1|sort -n -r -t. -k 3) >youyou.complete.log
fmt
гарантирует, что у нас есть один файл youyou на строку, а sort
сортирует численно (-n) в 3-м поле (-k 3), где разделитель полей представляет собой период (-т.).