例子:

例子:

我需要将文件名从一个文件夹复制到另一个文件夹。文件内容永远不会改变。没有文件被覆盖、移动或复制。它只与文件有关名称

我有一个文件夹 A,其中的文件名为:

  • 显示 - S01E01 - 描述性标题.mkv
  • 显示 - S01E02 - 另一个描述性标题?.mkv
  • 显示 - S01E03 - 另一个复杂的名字!.mkv
  • ...

我有一个文件夹 B,其中的文件名为:

  • 节目.s01e01.mkv
  • 节目.s01e02.mkv
  • 节目.s01e03.mkv
  • ...

我不再需要文件夹 A 中的文件,因为文件夹 B 中的文件质量更好。但我不想手动重命名文件夹 B 中的所有文件,使其具有正确的文件名(包括剧集标题)。我想自动将文件夹 A 中的文件的正确文件名转移到文件夹 B 中的文件。两个文件夹中的字母顺序相同。因此,文件夹 B 中的第 n 个文件对应于文件夹 A 中的第 n 个文件。最终,文件夹 B 将包含与文件夹 A 中完全相同的文件名,但文件内容当然不同。

例子:

前:

文件夹 A:

  • 节目 - S01E01 - 绿苹果.mkv
  • 节目 - S01E02 - 天空中的桃子.mkv

文件夹 B:

  • 节目.s01e01.mkv
  • 节目.s01e02.mkv

后:

文件夹 A:

  • 节目 - S01E01 - 绿苹果.mkv
  • 节目 - S01E02 - 天空中的桃子.mkv

文件夹 B:

  • 节目 - S01E01 - 绿苹果.mkv
  • 节目 - S01E02 - 天空中的桃子.mkv

我如何在 Bash 中做到这一点?(或者任何其他 GNU/Linux 工具,KDE 也可以)

答案1

要完成您想要的操作,需要编写一些脚本。虽然不太复杂,但有点重复。

我建议安装tvnamer https://github.com/dbr/tvnamer

这将使用数据库一致地重命名所有媒体。如果您对所有媒体都运行此操作,那么低质量和高质量节目都将具有相同的名称,因此您只需使用 将高质量节目复制到低质量节目上即可cp

答案2

您可以尝试 bash 数组。我在下面给出了一个骨架解决方案。

cd $DIR1
list1=( * )

cd $DIR2
i=0
for f in *
do
  mv $f ${list1[$i]}
  (( i += 1 ))
done

正如您在问题中提到的,假设两个目录中的文件数量完全相同,并且按字母顺序排列。可以进行更多错误检查,并可能进行模式匹配以使其更强大。

list1 是一个包含该目录中文件名的数组。${list1[0]} 是数组中的第一个元素,等等。我不确定这是否适用于带有空格的文件名等。

相关内容