所以我有一个完全混合在一起的不同文件格式的音乐文件夹。它结构合理:音乐/ [艺术家姓名] / [专辑名称],在名为“各种”的文件夹中包含编辑专辑。有些文件夹只包含.mp3,.m4a或.flac文件,有些文件夹有不同文件格式的多个版本的相册。当然还有各种各样的.jpegs封面艺术,很多艺术家文件夹都包含了艺术家肖像的.jpeg,还有很多杂项.cue和.log文件以及其他垃圾。
我想要最终得到的是.flac文件的单独音乐文件夹,保留现有的文件夹结构,将其从现有库中删除。我不想在我当前的库中结束空文件夹,其中专辑只是在flac中。对于具有多种格式的专辑文件夹,我想将封面与封面艺术一起移动到新的库中,但当然也要保留现有的封面艺术。
我无法找到能够处理这个问题的应用程序,但我认为shell脚本可能会处理它。但是我对bash很可怜,真的不想破坏我的库。
这些文件位于我可以使用mac,windows或linux访问的远程磁盘上,所以任何方法都很好。
完全澄清一下,这是我希望编写的逻辑:
找到包含.flac文件的/ Music的每个子目录
将这些目录中的每个目录(和中间父目录)复制到/ FLAC中的新位置,但从副本中排除其他音频文件类型(.mp3,.m4a等)。
如果目录中没有其他音频文件类型而不是.flac,请删除整个目录。如果它有其他音频文件,只需删除.flac文件。
最后一次扫描所有/ Music以删除任何本身或任何子目录中不包含音频文件的目录。
答案 0 :(得分:1)
这是另一种方法:
find . -type f -name \*.flac -printf "%h\n" |
sort -u |
while read -r dirname; do
new="../flac/$dirname"
echo mkdir -p "$new"
echo mv "$dirname"/*.flac "$new"
jpgs=("$dirname"/*.jpg)
[[ ${#jpgs[@]} -gt 0 ]] && echo cp "$dirname"/*.jpg "$new"
done
find
的-printf
将打印出每个flac文件的目录名(相对于当前目录sort -u
删除重复项 - 现在您有一个包含flac文件的目录列表如果您满意,请删除echo
命令。
答案 1 :(得分:0)
首先制作一个新的父文件夹,例如“MusicNew”应该相当于现有的“Music”文件夹。然后假设您要复制的子文件夹和文件类型的描述,以下代码行应该工作。
IFS='\n'
for i in `find Music -mindepth 2 -maxdepth 3 -type f -name "*flac"`;
do
echo ${i};
newfold=`echo ${i} | sed -e 's/Music/MusicNew/g'`;
filename=`basename ${i}`;
fulldirpath="${newfold:0:${#newfold} - ${#filename}}";
echo $fulldirpath/${filename};
mkdir -p ${fulldirpath};
mv ${i} ${fulldirpath}/;
done