Переименовать команду с несуществующим целевым каталогом

Я пытаюсь автоматически группировать файлы в подкаталоги, используя следующую команду:

$ rename 's/(.)(.)(.+)/$1\/$2\/$1$2$3/' *.* 

Сухой пробег с параметром -n показывает мне то, что я хочу:

test.jpg переименовано в t / e / test.jpg

Но фактическое переименование не выполняется

Невозможно переименовать test.jpg t / e / test.jpg: Нет такого файла или каталога

потому что подкаталогов еще не существует.

Как я могу достичь этого, не создавая вручную все подкаталоги?

Существует разница между переименованием и перемещением куда-то. В случае, когда самый простой способ (в современном bash ) охватывает все файлы:

 for f in *.* do d=${f::1}/${f:1:1} [ -d "$d" ] || mkdir -p "$d" mv "$f" "$d" done