Linux. Задачи на bash 3.

Блок статей «Задачи на bash»
Предлагаю третью задачу из данного цикла.

Необходимо перенести файлы, имеющие расширения html и htm, из каталога data в каталог tabs.
Каталоги исходный(data) и новый(tabs) находятся на одном уровне файловой системы.
Например, /var/data и /var/tabs.

Данные в каталоге data имеют следующую структуру:

data/<letter|digit>/<artist>­<song>­ver<number>.htm(l)?

или

data/<letter|digit>/<artist>­<song>.htm(l)?

регулярное выражение:

data\/[\w\d]\/[][]+(­ver\d+)?\.htm(l)?

Например:

data/a/abba­dancing_queen­ver1.htm
data/0/009_sound_system­space_and_time.html

Перенести нужно с изменением структуры каталогов, имя артиста должно стать подкаталогом.

tabs/<letter|digit>/<artist>/<song>­ver<number>.htm(l)?

Например, файлы из предыдущего примера должны быть перенесены как:

tabs/a/abba/dancing_queen­ver1.htm
tabs/0/009_sound_system/space_and_time.html

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

Решение
#!/bin/bash
olddir=/var/data/
newdir=/var/tabs/
 
files=$(find $olddir -regex ".*\(\.htm\|\.html\)$")
 
for file in $files
do
    dir_2=$(echo $file | awk -F"/" '{print $5}')
    if [ ! -d $newdir$dir_2 ]; then
         mkdir $newdir$dir_2
    fi
 
    artist=$(echo $file | awk -F"/" '{print $6}' | awk -F"­" '{print $1}')
    if [ ! -d $newdir$dir_2/$artist ]; then
         mkdir $newdir$dir_2/$artist
    fi
 
    song=$(echo $file | awk -F"/" '{print $6}' | sed s/^[0-9a-z_]*­//)
 
	#Далее нужное действие раскомментировать 
 
    #физическое перемещение
    #mv $file $newdir$dir_2/$artist/$song
 
    #без физического перемещения
    #ln $file $newdir$dir_2/$artist/$song
    #rm $file
done