Вот простой вариант, если вас не волнует перебор -принудительного копирования каждого файла. Он перебирает каталоги (, предполагая четыре -цифры года, как в вашем примере ), естественно сортируя их в числовом порядке и копируя их содержимое в текущий каталог:
for date in [[:digit:]][[:digit:]][[:digit:]][[:digit:]]/; do cp -r "$date"/*.; done
Разбит на несколько строк:
for date in [[:digit:]][[:digit:]][[:digit:]][[:digit:]]/
do
cp -r "$date"/*.
done
Если у вас есть точечные файлы в верхних -каталогах уровня (непосредственно под годами ), то вам следует shopt -s dotglob
заранее.
Это копирует каждый файл, позволяя «более новым» (файлам более поздних лет )стирать старые файлы.
Если ваши имена каталогов отличаются, вам нужен другой шаблон подстановки/подстановки. В случае числовых префиксов, которые не заполнены нулем -, я бы предложил:
for directory in ?-* ??-* ???-*... etc...
столько, сколько вам нужно для захвата старшего числового префикса. Сортировка производится в двух местах:
for
, двухзначные -имена — вторыми и т. д. 10-etc
будет стоять перед 11-etc
и так далее.