背景:我的 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