Предполагая, что файлов много, возможно, гораздо быстрее сделать это, используя конвейеры вместо цикла for. Это дает дополнительное преимущество, заключающееся в избежании сложного bash
-специфического синтаксиса и использовании вместо этого основных программ командной строки unix / linux.
find *-*.mp3 |
sed 's,\([^-]\+\)\s*-\s*\(.*\),mkdir -p "\1"; mv "&" "\1"/"\2",' |
bash
Объяснение:
Это find
для поиска всехфайлы, соответствующие - .mp3 в текущем каталоге.
Эта команда sed
заменяет каждую строку на строку команды, например:
aaa - bbb.mp3
->
mkdir -p "aaa"; mv "aaa - bbb.mp3" "aaa"/"bbb.mp3"
bash
команда запускает каждую из этих командных строк.