Конечно, это может быть сценарий (вариант # 1), для которого есть бесконечные возможности;и «awk» - один из многих вариантов (замените жестко закодированный «foo / bar / ...» на (например) find * -name \*.mp3
):
$ for x in foo/bar/{abc,xyz}/{f1,f2,f3}.mp3
do
newfile=$( echo $x | awk -F/ '{ print $3 "-" $2 "-" $NF }')
echo mv $x foo/$newfile
done
mv foo/bar/abc/f1.mp3 foo/abc-bar-f1.mp3
mv foo/bar/abc/f2.mp3 foo/abc-bar-f2.mp3
mv foo/bar/abc/f3.mp3 foo/abc-bar-f3.mp3
mv foo/bar/xyz/f1.mp3 foo/xyz-bar-f1.mp3
mv foo/bar/xyz/f2.mp3 foo/xyz-bar-f2.mp3
mv foo/bar/xyz/f3.mp3 foo/xyz-bar-f3.mp3
Но, возможно, более приятный, простой, более гибкий (опция # 2) будет использовать pytagsfs , которая создает виртуальную (плавкую) файловую систему на основе определенных вами правил, что делает вашу структуру каталогов "видимой" так, как вы этого хотите.Как только вы это сделаете, скопируйте эту структуру виртуального каталога в структуру физического каталога.Таким образом, вы можете настроить виртуальный макет, просмотреть его, а затем просто скопировать, так сказать, на флешку «сделай так».(Однако для этого вам может понадобиться довольно просторное рабочее пространство.)
$ tree foo-orig # or ls -R, whatever
... your files...
$ mkdir by-genre
$ pytagsfs -o format='/%g/%a - %t.%e' foo-orig by-genre
$ tree by-genre
... in different dir structure
$ cp -r by-genre foo-new # make it so