2016-07-26 4 views
1

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

Rock, World - SongTitle - Interpret.mp3 
Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3 
Rock, Acoustic - SongTitle3.mp3 
SingerSongwriter, World - SongTitle4.mp3 

Результат должен выглядеть следующим образом:

storage/ 
- Rock, World - SongTitle - Interpret.mp3 
- Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3 
- Rock, Acoustic - SongTitle3.mp3 
- SingerSongwriter, World - SongTitle4.mp3 
tags/ 
- Rock/ 
    - LINK TO: storage/Rock, World - SongTitle - Interpret.mp3 
    - LINK TO: storage/Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3 
    - LINK TO: storage/Rock, Acoustic - SongTitle3.mp3 
- World/ 
    - LINK TO: storage/Rock, World - SongTitle - Interpret.mp3 
    - LINK TO: storage/SingerSongwriter, World - SongTitle4.mp3 
- Acoustic/ 
    - LINK TO: storage/Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3 
    - LINK TO: storage/Rock, Acoustic - SongTitle3.mp3 
- SingerSongwriter/ 
    - LINK TO: storage/SingerSongwriter, World - SongTitle4.mp3 
    - LINK TO: storage/SingerSongwriter, World - SongTitle4.mp3 

Я обрисовал сценарий который должен обращаться с этим для меня:

#!/bin/bash 

mkdir -p tags; 
mkdir -p storage; 

for file in *; do 
     #Grab Tags from the file name 
     tags=$(echo $file | sed 's/ - /\n/g'); # Doesn't work as it should 

     #                # 
     # This is just blind, can't say if it works, but should(TM).. # 
     #                # 

     #Move file to storage folder 
     mv $file storage/$file; 

     #Foreach Tag: 
     while read -r tag; do 
       #Create tag folder if it doesn't exist yet. 
       mkdir -p tags/$tag; 
       #Create Symbolic Link 
       ln -s storage/$file tags/$tag/$file; 
     done <<< $tags; 
done 

Вопрос: Как мне нужно прил ust мой сценарий, чтобы он работал? Я немного благословение в сценариях bash, поэтому, пожалуйста, не обвиняйте меня.

+1

'tags = $ (echo $ file | grep -Eo"^[^ -] * ")'? – Aaron

+0

Я думаю, вы должны уточнить, если вы буквально означаете сортировку слов «Один», «Два», «Три» (который, если вы ожидаете перейти к 100, люди не будут писать бесплатно ;-) .. Или если вы действительно означают «теги предметной области», такие как «Rock», «90s',« Asian ». ? Удачи. – shellter

+0

@shellter Я имел в виду 'TagOne',' TagTwo', 'TagThree' .. Эти реальные теги, очевидно, не являются настоящими тегами. Я получил их в * быстро *, * медленном *, * акустическом *, * Action * и т. Д. – jeyemgfx

ответ

1

После обхода, это мой ответ на вопрос.

#!/bin/bash 

mkdir -p tags; 
mkdir -p storage; 

for file in *; do 

     #Grab Tags from the file name 
     tags=$(echo $file | grep -Eo "^[^-]*" | sed -e 's/, /\n/g'); 

     #                # 
     # This is just blind, can't say if it works, but should(TM).. # 
     #                # 

     #Move file to storage folder 
     mv "$file" "storage/$file"; 

     #Foreach Tag: 
     while read -r tag; do 
       #Create tag folder if it doesn't exist yet. 
       mkdir -p tags/$tag; 
       #Create Symbolic Link 
       ln -s "storage/$file" "tags/$tag/$file"; 
     done <<< "$tags"; 
done 
Смежные вопросы