我有一个目录,里面有很多文件。我唯一关心的是那些扩展名为.jar
.但是,该目录中还有其他文件。
我有一个源目录仅有的 .jar
文件。我想实现相当于:
rm destdir/*.jar
cp sourcedir/*.jar destdir
但是,我想在实际上不这样做去除已经存在的文件(如果它们已经是正确的文件)。
换句话说,我希望能够运行一个命令来:
- 对于
.jar
中存在sourcedir
但不存在的任何文件destdir
,请将它们复制过来。 - 对于 和 中存在的任何文件
.jar
,请确保 中的副本与 中的副本匹配,如果不匹配则覆盖它。sourcedir
destdir
destdir
sourcedir
- 对于任何
.jar
存在于destdir
但不是中sourcedir
,删除该文件。 - 对于其中存在的任何其他文件
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 过滤器:仅复制一种模式