我的音乐收藏包含“艺术家姓名”文件夹,其中许多文件夹包含带有“专辑名称”的子文件夹。如果“艺术家姓名”文件夹中没有“专辑名称”文件夹,则该文件夹包含 .flac 文件和转换为 mp3 的 flacs 的“mp3”文件夹。在包含“专辑名称”的“艺术家姓名”文件夹中,mp3 文件夹位于每个“专辑名称”子文件夹中。以下是我想要执行的操作:
- 从每个文件夹中删除 .flac 文件(我不需要保存它们)。
- 将 mp3 文件夹中的文件移动到根文件夹。
- 删除 mp3 文件夹。
是否有终端命令可以完成此操作?TIA 提供任何帮助!
答案1
以下是手动方法。如果您想要一个脚本,则需要提供目录和文件的示例。脚本的问题...如果编码错误,脚本不会在意...它会执行您认为错误的操作,可能造成无法恢复的最终结果。
如果可能的话,请先进行备份。如果使用不当,rm
可能mv
会把事情搞砸。要测试您要做的事情,您可以使用ls
相同cp
的第二部分,看看要做的事情是否正确。
您可以使用通配符从子文件夹中删除文件。
rm */*.flac
.flac
将从当前位置删除 结尾的文件,深度为 1 个目录。您可以添加更多/*
文件以深入了解目录结构(rm*/*/*.flac
表示深度为 2 个目录等)。移动文件也是如此:
mv */*.mp3 .
将把所有文件移动到 1 个目录深度并以 .mp3 结尾的当前目录。mv */*/*.mp3 .
移动到 2 个目录深度。
如果您有很多子目录(而不仅仅是 1 或 2 级深度),这将移动在当前目录中找到的所有 mp3,无论深度有多深,并将它们放在当前目录中:
find . -iname "*.mp3" -exec mv {} . \;
.flac
这将删除当前目录中所有以结尾的文件,无论其深度如何:
find . -type f -name '*.flac' -exec rm {} \;
我通常的做法是在当前目录之外创建一个新文件夹,然后将所有 mp3 文件复制到该目录,当您确认操作正确后,删除包含所有 flac 和目录的目录。这样不容易出错。
因此,如果我在 /home/rinzwind/musicfiles/ ,我会创建 /home/rinzwind/mp3/ 并首先执行类似这样的操作。
find /home/rinzwind/musicfiles/ -iname "*.mp3" -exec mv {} /home/rinzwind/mp3/ \;
答案2
@David @Rinzwind,感谢您的回复。在 Ubuntu 22.04 Beta 中,我将包含 flacs 的根文件夹复制到临时目录,并在此文件夹中运行此可执行脚本:
#/bin/bash
shopt -s globstar
for f in **/*.flac; do
flac -cd "$f" | lame -b 320 - "${f%.*}".mp3 && rm "$f"
done
此操作将删除所有 flac 文件。在#
'rm "$f" 前添加 a 可防止删除。