我需要将文件名从一个文件夹复制到另一个文件夹。文件内容永远不会改变。没有文件被覆盖、移动或复制。它只与文件有关名称。
我有一个文件夹 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]} 是数组中的第一个元素,等等。我不确定这是否适用于带有空格的文件名等。