使用带有 rsync --files-from 选项的查找输出

Using find output with rsync --files-from option

我正在尝试让 rsync 的 --file-from 选项正常工作,但做不到。 本质上,我想先用 find 扫描,然后从它的输出中创建一个文件。然后我希望 rsync 使用 file-from 读取该文件,并且只发送文件中指定的内容。 但它不会那样做,它会发送所有内容。 例子: rsync -r -i --files-from=<(find thisdir/ -not -path 'parent4' -not -path "parent5" ) ./root@10.125.126.115:/root/

'thisdir' 在当前工作目录中。 Rsync 不应发送嵌套在 'parent4' 和 'parent5' 子目录下的任何内容。 但是:

cd+++++++++ thisdir/parent5/
<f+++++++++ thisdir/parent5/thisfile
cd+++++++++ thisdir/parent5/subdira/
cd+++++++++ thisdir/parent5/subdirb/
cd+++++++++ thisdir/parent5/subdirc/
cd+++++++++ thisdir/parent5/subdird/

确实如此。

我误会了什么?

不要使用 -r,因为这将对每个找到的项目进行递归。

此外,find thisdir/ -not -path parent4 将不起作用,因为路径 glob 模式必须完整,因此您需要例如 -not -path '*/parent4/*'。这匹配(并排除)目录下的所有内容,但您还需要 -not -path '*/parent4' 来仅排除目录。

通常,要进行这种排除,可以使用 -prune 停止查找进一步下降。例如:

find thisdir/ '(' -path '*'/parent4 -o -path '*'/parent5 \) -prune -o -print