我正在使用该find
命令来定位需要scp
'd'到目标主机的文件。我的问题是目标上没有维护目录结构。
cd /path/to/dir; find . -exec scp -pr {} hostname:/tmp/. \;
(我已经用 和 试过了-r
。)
如果find
产量./subdir/file
,我希望将其复制到hostname:/tmp/subdir/file
.
哦,在建议之前,远程主机已禁用rsync
.
您可以使用两个单独的命令来执行此操作。首先,您需要在每个文件所在的远程服务器上创建目录
find . -type f -printf "%h\n" | sort | uniq | xargs -i ssh hostname mkdir -p /tmp/{}
然后你可以像以前一样复制每个文件
find . -type f -exec scp {} hostname:/tmp/{} \;
您需要的不仅仅是找到更复杂的东西:
#!/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