假设我正在使用我仅从以下两个命令中知道的特殊功能find
来定义- 操作的源文件:rsync
find /path/to/data -mtime -7 -mtime +5 -exec rsync -aAXu {} /path/to/dest \;
但是,在这种情况下,我不能使用+
with -exec
asrsync
将目的地作为最后一个参数。
这意味着rsync
每个匹配文件都会调用一次,而不是创建参数列表并rsync
仅调用最少次。
出现同样的问题,xargs
因为我需要-I
标志,这意味着-L 1
.
该手册似乎没有显示--destination-dir=dest
选项。
有没有什么简单的方法可以rsync
从源文件列表中创建一个 -built-up 命令?
也许这是一个 XY 问题,而其他命令更适合?
不要打电话
rsync
,而是-exec
打电话sh -c
:这
sh -c
使用一个内联脚本调用,该脚本只是rsync
以您想要的方式调用,并且"$@"
是从find
.尾随
sh
是一个任意字符串,将放置$0
在内联脚本中。这是必要的,因为第一个找到的路径名将被放入$0
,因此不是扩展的一部分"$@"
。in 的值$0
应该是当前 shell 的名称,并将在 shell 生成的任何诊断消息中使用。