根据 id3 标签将符号链接移动到文件夹中

根据 id3 标签将符号链接移动到文件夹中

我正在尝试将我的音乐文件夹放入合理的位置。现在,我已将所有音乐存储在 中,/home/foo因此我已将所有专辑软链接到~/music。我希望结构是~/music/<artist>/<album>我现在已将所有符号链接放入其中,~/music因此我只需将符号链接放入正确的结构中即可。我正尝试通过深入研究符号链接专辑并使用 id3info 获取艺术家姓名来做到这一点。我可以做到这一点,但似乎无法使其正常工作。

for i in  $( find -L $i -name "*.mp3" -printf "%h\n")
do

 echo "$i" #testing purposes

    #find its artist
    #the stuff after read file just cuts up id3info to get just the artist name
 #$artist = find -L $i -name "*.mp3" | read file; id3info $file | grep TPE | sed "s|.*: \(.*\)|\1|"|head -n1

 #move it to correct artist folder
 #mv "$i" "$artist"

done

现在,它确实找到了正确的文件夹,但是每次目录名称中出现空格时,它都会将其变成换行符。

这是我正在尝试做的一个示例

$ ls 
DJ Exortius/
The Trance Mix 3 Wanderlust - DJ Exortius [TRANCE DEEP VOCAL TECH]@

我正在尝试将 mvThe Trance Mix 3 Wanderlust - DJ Exortius [TRANCE DEEP VOCAL TECH]@放入真实目录DJ ExortiusDJ Exortius该目录已经存在,因此只需将其移动到基于内部 mp3 的 id3 标签的正确目录中即可。

谢谢!

附言:我尝试过 easytag,但是当我重组相册时,它会将其移走,/home/foo这不是我想要的。

答案1

您应该使用管道输入findwhile不是执行for $(find),以便正确处理带有空格的文件名。

您也可以使用进程替换来完成相同的操作。您可以重定向<(find)donewhile 循环的一部分。

find -L $i -name "*.mp3" -printf "%h\n" | while read -r i
do
    moving_stuff_around
done

或者

while read -r i
do
    moving_stuff_around
done < <(find -L $i -name "*.mp3" -printf "%h\n")

后者的优点是不需要创建子shell。

答案2

如果您使用硬链接而不是符号链接,那么您可以在使用 EasyTAG 重组链接的同时保留无序池。

相关内容