如何使用 rsync 强制所有 *.jar 文件匹配?

如何使用 rsync 强制所有 *.jar 文件匹配?

我有一个目录,里面有很多文件。我唯一关心的是那些扩展名为.jar.但是,该目录中还有其他文件。

我有一个源目录仅有的 .jar文件。我想实现相当于:

rm destdir/*.jar
cp sourcedir/*.jar destdir

但是,我想在实际上不这样做去除已经存在的文件(如果它们已经是正确的文件)。


换句话说,我希望能够运行一个命令来:

  1. 对于.jar中存在sourcedir但不存在的任何文件destdir,请将它们复制过来。
  2. 对于 和 中存在的任何文件.jar,请确保 中的副本与 中的副本匹配,如果不匹配则覆盖它。sourcedirdestdirdestdirsourcedir
  3. 对于任何.jar存在于destdir不是sourcedir,删除该文件。
  4. 对于其中存在的任何其他文件destdir(没有.jar扩展名),请忽略它们 - 不要删除它们或更改它们。

似乎这应该可以通过rsync.我怎样才能做到这一点?

答案1

您可以使用:

rsync -av --include='*.jar' --exclude='*' --delete \
    sourcedir/ destdir/

-a选项是存档模式,它保留链接和时间戳等内容(查看页面man以获取完整说明)。这-v是为了冗长,如果您不关心日志,请将其删除。

这应该可以处理你的前三个选项。该--delete选项将满足您的第四个要求,同时忽略排除的文件。

如果您希望包含包含.jar文件的目录,您可以使用

rsync -av --include='*.jar' --include='*/' --exclude='*' --delete \
    sourcedir/ destdir/

根据此处的答案,如果您还有其他问题,它应该可以帮助您:Rsync 过滤器:仅复制一种模式

相关内容