Одно тестовое задание

Периодически мониторю hh в поисках интересной работы и вдруг в 20-х числах декабря наталкиваюсь на вакансию у ultimate-guitar на серверного администратора. Требования и условия показались интересными и я попросил тестовое задание, чисто посмотреть смогу ли.

Задание прислали через пару дней, но было уже поздно его выполнять — я собирался в отпуск в Финляндию, а потом и праздновать новый год, по этому в итоге добрался только сейчас. И так как отсылать что-то сейчас уже чисто не вежливо, то выложу одно и заданий сюда.

    Необходимо перенести файлы, имеющие расширения html и htm, из каталога data в каталог tabs.
Каталоги исходный(data) и новый(tabs) находятся на одном уровне файловой системы. Например, /var/data и /var/tabs.
Данные в каталоге data имеют следующую структуру:
data/<letter|digit>/ver.htm(l)?
или
data/<letter|digit>/.htm(l)?
регулярное выражение:
data\/[\w\d]\/[^]+[^]+(ver\d+)?\.htm(l)?
Например:
data/a/abbadancing_queen-ver1.htm
data/0/009_sound_systemspace_and_time.html
Перенести нужно с изменением структуры каталогов, имя артиста должно стать
подкаталогом.
tabs/<letter|digit>//ver.htm(l)?
Например, файлы из предыдущего примера должны быть перенесены как:
tabs/a/abba/dancing_queen-ver1.htm
tabs/0/009_sound_system/space_and_time.html

Учтите, что в каталоге дата могут находится файлы с другими расширениями и их переносить не нужно.
Каким способом можно выполнить такую процедуру?
Как решить данную задачу, не выполняя физического перемещения данных?

Решение далеко от идеала, но работает)) Читать далее