将不同类型的电影存放到 NAS 上的不同文件夹中

将不同类型的电影存放到 NAS 上的不同文件夹中

背景:我的 NAS 上有 500 多部电影。我的家人无论身在何处都可以观看这些电影。主要问题是我的 Synology DS215J NAS 设备无法播放 *.avi 文件,但可以播放 mkv、wmv、mp4 等。

目前来看: 在此处输入图片描述

我的问题是,什么是组织这些文件的最佳方法,以便我的家人可以轻松找到他们可以直接从 NAS 观看的文件。

我的第一个想法是创建 3-4 个文件夹,并以 #AVI #MP4 #MKV 等名称命名(标签是让这些文件夹在他们使用“按名称查看”检查 NAS 时位于顶部),并将电影放在这些文件夹中。但我认为如果他们想找到一部确切的电影,却不知道要查找哪个文件夹,那将是一个问题。

第二个想法是将所有 avi 文件转换为 mkv 或 mp4,但这将花费很长时间。

先感谢您!

答案1

Bash(应该可以通过 SSH 访问)使用glob匹配提供文件名匹配。如果当前目录中的所有文件都有您想要匹配的名称,这可能会很有用。您可以移动名称中包含字符串的所有文件影片到目录mkv_文件像这样:

mv *.mkv mkv_files/

这将移动所有带有 mkv 扩展名的文件在当前目录中到名为mkv_文件

从您的照片来看,您似乎将文件放在了子目录中,因此上述建议对您不起作用。您可能会发现以下内容更有用(尽管更复杂):

1. 查找当前目录下所有与特定文件名匹配的文件

首先,在运行任何可能覆盖数据的命令之前,请务必小心,确保您了解将要执行的操作。

一个好方法是将所有匹配项打印到命令行:

IFS=$'\n'; for i in $(find ./ -iname '*.mkv'); do echo "${i}"; done

这是起什么作用的?

首先,IFS=$'\n'设置内部字段分隔符作为换行符,这意味着 find 命令输出中的每个换行符都将被视为单独的条目,从而可以处理文件名中带有空格的文件。

find ./ -iname '*.mkv'对所有以以下名称结尾的文件进行不区分大小写的查找.mkv深入到当前目录

这是一个循环,在 find 循环中的每个结果上for i in运行代码echo ...

2. 现在您知道了要操作的文件,请对每个文件运行一个命令:

要移动每个文件,您可以mv对每个文件运行命令。

首先,创建一个目录来放置所有匹配的结果:

# create a directory called mkv_files
mkdir mkv_files

现在,您可以使用上述命令作为起点:

IFS=$'\n'; for i in $(find ./ -iname '*.mkv'); do mv "${i}" mkv_files; done

请记住,如果两个 MKV 文件同名,这可能会覆盖它们。您可以使用-n/--no-clobber选项来指示mv不要覆盖文件:

IFS=$'\n' for i in $(find ./ -iname '*.mkv'); do mv -n "${i}" mkv_files; done

或者,你可以调整上述命令来运行ffmpeg命令对每个文件进行操作,将它们转换为您选择的编解码器。

另一个示例 - 将所有包含 .mkv 文件的目录移动到名为mkv_目录

IFS=$'\n'; for i in $(find ./ -iname '*.mkv'); do mv $(dirname $i) mkv_directory/; done

相关内容