使用带有 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
我正在尝试让 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