如何根据文件夹中特定文件类型的存在来 rsync 整个文件夹

如何根据文件夹中特定文件类型的存在来 rsync 整个文件夹

我设置了一个服务器,用于将电影接收到一个文件夹中。然后我使用 DLNA 提供这些电影。但在它们最终存放的初始文件夹中,各种文件都存放在那里。图片、音乐、文档等。我想通过在该文件夹中运行以下脚本来解决这个问题

rsync -rvt --include='*/' --include='*.avi' --include='*.mkv' --exclude='*' . ./电影/

它可以工作并扫描给定的文件夹并将所有找到的具有给定扩展类型的电影移动到该Movies文件夹​​中。

但我想知道是否有办法告诉 rsync if a folder if found that includes a movie of the given extension types, sync the entire folder. Including other files such as .srt。这可以让我更轻松地让字幕随电影一起移动。

我通过用 php 编写的脚本找到了解决方案(是的,实际上我在 Linux 中使用 php 编写了大部分脚本……这只是很久以前养成的习惯)。但如果 rsync 可以从一开始就处理它,那就太好了。

另外,我注意到这行 rsync 实际上复制了给定文件夹中的所有根文件夹。如果文件夹中没有电影,它将创建一个空文件夹。我该如何防止 rsync 执行此操作……并省去了删除所有空文件夹的麻烦Movies

答案1

我非常确信您需要使用某种围绕 rsync 的外部脚本来实现这一点。因此,对您问题的最终答案是简洁的“不”。

答案2

按照上面的路径示例,您的源文件位于“。”中,并且您希望将它们复制到“../Movies”:

if [ `find . -name \*.avi | wc -l` -gt 1 ]; then rsync ./ ../Movies/; fi

答案3

为什么不同步所有内容而不只是电影 (*)。如果所有数据都已同步 - rsync 将不执行任何操作,如果出现一些新文件(即字幕或电影) - 它们将被同步

答案4

不太好,但我最终使用了 rsync 选项,然后运行find -type d -empty -delete以删除所有空文件夹

相关内容