我想将文本文件中列出的文件以绝对路径复制到另一个文件夹,并保留目标中的文件夹树。
在2.txt中:
//PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T070720.*
//PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T064927*
//PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T070210.xml
我希望源文件夹树保留在输出文件夹中。
outd=/cygdrive/c/0/out27/
rsync -vR --include-from=in2.txt / $outd
产生以下结果并且不复制任何内容:
$ rsync -vR --include-from=in2.txt / $outd
skipping directory /.
sent 17 bytes received 12 bytes 19.33 bytes/sec
total size is 0 speedup is 0.00
尝试使用 --parents 进行 cp:
while read p; do
cp --parents "$p" $outd # i had problem with unc path //corp-fs01
done <in2.txt
产量..
//PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T070210.xml
cp: failed to get attributes of '/PMDA-SO5632': No such file or directory
我该如何实现复制?不一定非要使用 rsync 或 cp。
答案1
不要以为该-R
属性可以完成您想要完成的任务。通常,存档属性就足够了。Rsync 将根据匹配的第一个规则执行操作。而那些不匹配任何规则的对象将不是被跳过并且应该被完全排除。
rsync -va --include-from=in2.txt --exclude='*' / $outd
父目录也必须包括在内,否则它们将被排除'*'
,并且 rsync 将不会递归遍历目录结构。
/PMDA-SO5632/
/PMDA-SO5632/data/
/PMDA-SO5632/data/vision_6830/
/PMDA-SO5632/data/vision_6830/image_data/
/PMDA-SO5632/data/vision_6830/image_data/top_surface/
/PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/
/PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/
/PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T070720.*
/PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T064927*
/PMDA-SO5632/data/vision_6830/image_data/top_surface/nok/220104/inner_rim_220110T070210.xml
另一个解决方案是在 rsync 处理之前展开 in2.txt 中的所有文件对象,然后改用--files-from=
。它将仅复制文件中包含的对象,而无需添加任何其他父目录。
rsync < in2.txt -va --files-from=- / $outd