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