我正在尝试将我的音乐文件夹放入合理的位置。现在,我已将所有音乐存储在 中,/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 Exortius
。DJ Exortius
该目录已经存在,因此只需将其移动到基于内部 mp3 的 id3 标签的正确目录中即可。
谢谢!
附言:我尝试过 easytag,但是当我重组相册时,它会将其移走,/home/foo
这不是我想要的。
答案1
您应该使用管道输入find
而while
不是执行for $(find)
,以便正确处理带有空格的文件名。
您也可以使用进程替换来完成相同的操作。您可以重定向<(find)
到done
while 循环的一部分。
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 重组链接的同时保留无序池。