我想将一些文件子集从 dirA 移动到 dirB(假设文件名中带有“blah”的文件),但我希望所有嵌套目录在新位置中都相同。我怎样才能做到这一点?
答案1
rsync
过滤规则的魔力:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
有关过滤规则的详细信息,请参阅rsync
手册页,但这里是针对此特殊需求的精简版本。
--filter="+ */"
意思是“包含目录中的所有内容”
--filter="-! *blah*
意思是“排除文件名中不包含 blah 的所有内容”
答案2
如果您需要复制这些文件,cp 即可:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
选项--parents
保留子目录 - 它为目标创建完整目录路径。
答案3
这对我有用:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" [email protected]:/source/directory/ /destination/directory/
交换机-e
定义rsync
传输协议,端口为-p 22
。此外,尾部/
斜杠对于让程序知道它正在处理目录也很重要。
感谢@pdo 在我工作日中提供的额外时间!