Вкратце:
find dirA -type f -size +300m -printf "mv %p dirB/%P\n" | sh
Но все подкаталоги в dirB должны быть созданы до того, как вы начнете. По этой причине я предлагаю вам выполните следующие два шага:
cd dirA
find . -type f -size +300m -printf "mkdir -p ../dirB/%h\nmv %p ../dirB/%P\n" | sh
Относительно cpio (фактически он решает проблему с подкаталогами):
(cd dirA; find . -type f -size +300m) | cpio -p -md dirB
(Что касается cp (1) в том же потоке, который вы упоминаете, это нехорошо для вас, потому что это скопирует все файлы и подкаталог сборки с именем dirA в каталоге dirB. Эту проблему можно решить с помощью флага -T )