使用Find和SCP维护目录结构

时间:2013-09-06 21:01:54

标签: linux bash find scp

我正在使用find命令查找需要scp d的文件到目标主机。我的问题是目标结构没有在目标上维护。

cd /path/to/dir; find . -exec scp -pr {} hostname:/tmp/. \;

(我已经和-r一起尝试了这个。)

如果find产生./subdir/file,我希望将其复制到hostname:/tmp/subdir/file

哦,在建议之前,远程主机已禁用rsync

2 个答案:

答案 0 :(得分:4)

您可以使用两个单独的命令执行此操作。首先,您需要在远程服务器上创建每个文件

的目录
find . -type f -printf "%h\n" | sort | uniq | xargs -i ssh hostname mkdir -p /tmp/{}

然后您可以像以前一样复制每个文件

find . -type f -exec scp {} hostname:/tmp/{} \;

答案 1 :(得分:1)

你需要一些比找到更复杂的东西:

#!/bin/bash

remote=user@host:/path/to/dest/

for file in $(find . -type f); do
    echo scp $file ${remote}$(echo $file | sed 's:^\.*/::')
done

你可以随时将其浓缩为:

for file in $(find . -type f); do echo scp $file user@host:/path/to/dest/$(echo $file | sed 's:^\.*/::'); done

如果您确定它会按预期运行,请删除echo

随机示例输出:

scp ./cron/test.txt user@host:/path/to/dest/cron/test.txt
scp ./cron/spamproc/rfc822_addresses.php user@host:/path/to/dest/cron/spamproc/rfc822_addresses.php
scp ./cron/spamproc/mime_parser.php user@host:/path/to/dest/cron/spamproc/mime_parser.php
scp ./cron/spamproc/spamproc.php user@host:/path/to/dest/cron/spamproc/spamproc.php
scp ./cron/spamproc/class.imap.php user@host:/path/to/dest/cron/spamproc/class.imap.php
scp ./count_imap.sh user@host:/path/to/dest/count_imap.sh