如何将 mp3 子目录中的文件移动到父目录并消除 mp3/flac 子目录?

如何将 mp3 子目录中的文件移动到父目录并消除 mp3/flac 子目录?

我的音乐收藏包含“艺术家姓名”文件夹,其中许多文件夹包含带有“专辑名称”的子文件夹。如果“艺术家姓名”文件夹中没有“专辑名称”文件夹,则该文件夹包含 .flac 文件和转换为 mp3 的 flacs 的“mp3”文件夹。在包含“专辑名称”的“艺术家姓名”文件夹中,mp3 文件夹位于每个“专辑名称”子文件夹中。以下是我想要执行的操作:

  1. 从每个文件夹中删除 .flac 文件(我不需要保存它们)。
  2. 将 mp3 文件夹中的文件移动到根文件夹。
  3. 删除 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 可防止删除。

相关内容