我需要将远程文件夹(有子文件夹)中的所有文件按名称过滤复制到本地,但具有相同的子文件夹结构。
我做到了
./sshpass -p 'XXX' scp -r [email protected]:/app/eretail/gaia/web/eti/*new.html .
但这只会复制根文件夹中的文件。例如,远程01new.html
文件位于子文件夹中01
,我也需要复制这些文件,并使用相同的子文件夹结构。例如,像这样。
偏僻的
/app/eretail/gaia/web/eti/02new.html
/app/eretail/gaia/web/eti/01/01new.html
/app/eretail/gaia/web/eti/01/test.html
本地(预期结果)
./02new.html
./01/01new.html
我该怎么做?我必须使用 吗find
?怎么办?
谢谢。
编辑:rsync
是不可能的。
答案1
我在上面的评论中提到了--include
该命令的选项tar
。但是,GNUtar
命令不包含--include
选项。因此,正确的答案应该是:
./sshpass -p 'XXX' \
ssh [email protected] "cd /app/eretail/gaia/web/eti/ ; \
find . -name '*new.html' -print0 | tar -cvf - --null -T -" \
| tar -xvf -
在这里,我们使用ssh
而不是sftp
。ssh
将运行命令cd
,find
首先tar
在偏僻的服务器,将找到的文件“tar”find
到stdout
. 最后一个tar
命令将在当地的机器来“解压”来自的文件stdin
进入当前目录。
答案2
感谢@FedonKadifeli 的回答,它为我指明了正确的方向。看来他的解决方案是可行的,但我担心对老旧的 AIX 系统来说不行。
我是这样做的,也许对某些人有用。
./sshpass -p 'XXX' ssh [email protected] "
cd /app/eretail/gaia/web/eti/
find . -name '*new.html' -exec tar -rvf etikety-html.tar {} \;
"
./sshpass -p 'XXX' scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]:/app/eretail/gaia/web/eti/etikety-html.tar .
tar -xvf etikety-html.tar