我有大约 30K 首 mp3 格式的歌曲。我已经用 Musicbrainz Picard 整理/标记了它们。但是 Picard 因为标签而创建了过多的文件夹和子文件夹。
我现在需要一个脚本来读取每个子文件夹并将子文件夹内的所有 mp3 文件移动到主子文件夹。例如:
Music -
Offspring -
Album 1 - 20 songs
Album 2 - 30 songs
Album 3 - 5 Songs
Folder 1 - 2 Songs
Folder 2 - 3 Songs
Journey -
Song Pack 1 - 2 Songs
Packy 1 - 15 Songs
Packy 2 - 20 Songs
Packy 3 - 7 Songs
Album 2 - 20 songs
Whatever 3 - 10 Songs
运行脚本后它们将如下所示:
Music -
Offspring - All Songs inside THIS folder. Not inside subfolders of Offspring.
Journey - All Songs inside THIS folder. Not inside subfolders of Journey.
等等..
因此,每个音乐组的每个子文件夹中的所有音乐都不应再有任何子文件夹,并且其各自子文件夹中的所有歌曲都应移动到音乐组的主子文件夹中。
因此,当我检查“音乐”并看到 Bee Gees 时,我知道所有歌曲都在那里,而不是在 Bee Gees 的某个子文件夹中。
注意 - 在某些情况下,递归子文件夹超过 20 个。例如:Music/Lady Gaga/1/Album/Lady Gaga/2/2/2/1/1/1/1/3/3Album 2/Lady Gaga/1/1/1/SONG.mp3
。在这种情况下,我希望这些文件夹位于其中Music/Lady Gaga
,并消除其余文件夹。
答案1
我建议使用以下脚本(已经测试,但不作保证),从主目录运行,所有艺术家目录都位于该目录下:
#!/bin/bash
for f in *; do
find "$f" -mindepth 2 -type f -exec mv --backup=numbered -t "$f" {} +
done
for f in *; do
find "$f" -mindepth 1 -type d
done |
sort -r |
while read d; do
rmdir "$d"
done
它还负责删除重复项和空子目录。
答案2
看一下易达 。
sudo apt-get install easytag
扫描仪选项(扫描仪->重命名文件和目录)能够根据 ID 标签中的参数重新排列您的文件。
例子:
Artist/Track# - track name.ogg`: `%a/%n - %t
结果是:
Prince/07 - Purple Rain.ogg
答案3
如果你在执行此操作之前有足够的空间来备份音乐,那么你可能想要这样做。我测试过它,但它没有保修——如果它坏了,你可以保留所有零件。
我这样做的前提是(根据您的描述)您有一个按艺术家细分的主文件夹,并进一步按专辑细分。如果这与您的设置相符,请继续。
在终端中,cd 进入您的音乐目录,然后运行此命令(在 bash 中):
for j in * ; do (cd "$j" ; (for i in * ; do (cd "$i" ; find . -name \*.[mM][pP]3 -exec mv {} . \; ) ; done)) ; done
如果您有疑问,请直接询问。
答案4
您可能能够修改 Picard 的设置,以便它一开始就不会创建这个目录层次结构 - 它可能在某种程度上依赖于这些文件保留在它离开它们的位置。