scp,按名称查找远程文件并复制到本地

scp,按名称查找远程文件并复制到本地

我需要将远程文件夹(有子文件夹)中的所有文件按名称过滤复制到本地,但具有相同的子文件夹结构。

我做到了

./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而不是sftpssh将运行命令cdfind首先tar偏僻的服务器,将找到的文件“tar”findstdout. 最后一个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

相关内容