远程 SSH 复制文件名包含特定字符串的文件

远程 SSH 复制文件名包含特定字符串的文件

我有两个远程服务器。我当前已连接的一台以及我正尝试将大量文件复制到的一台 ( 10.10.0.13)

我需要在不同格式的目录中复制一系列文件:

/opt/DR/output/1/a/csva1file.csv
/opt/DR/output/1/a/csva2file.csv
/opt/DR/output/1/b/csvb1file.csv
/opt/DR/output/1/b/csvb2file.csv
/opt/DR/output/1/b/csvb3file.csv
/opt/DR/output/1/b/csvb4file.csv
/opt/DR/output/1/c/csvc1file.csv
...
/opt/DR/output/30/a/csva1file.csv

这对于文件夹output/1来说也是如此output/40。里面的所有文件夹都是相同的,里面的所有文件名都包含相似的字符串,只是根据它们所在的文件夹略有不同。

我想将任何目录中包含的所有文件复制a1到远程服务器中的文件夹中:

[email protected]:/data/landing/a/a1/

同样,我想对所有 、 等文件执行此操作b1c1并将c2它们复制到远程服务器上各自的位置。

我似乎找不到一种不涉及编写多行代码的方法来做到这一点。

我努力了

cd /opt/DR/output/1/a/
scp -r -v *a1* [email protected]:/data/landing/a/a1/

这是可行的,但我想复制所有*a1*csv 文件,而不必一一复制。

我已经研究过通配符,但认为它不适用于我的情况。我也考虑过使用paramiko/globpython,但我也无法让它工作。理想情况下,我想使用 bash shell 脚本来完成此操作,但 python 脚本也可以。

希望这说得通。任何帮助都将不胜感激。我可以通过SFTP或进行复制SCP

答案1

这是适合您任务的简单 bash 脚本。只需替换本地计算机目录中的 BASE 字符串,并替换远程计算机上的 SSH_BASE 字符串。我希望这有帮助。嵌套为 2

 #!/usr/bin/env bash

BASE="/opt/DR/output"
SSH_BASE="/data/landing"
for i in `ls ${BASE}`
do
    if [ -d ${BASE}/${i} ]; then
        for j in `ls ${BASE}/${i}`
        do
            if [ -d ${BASE}/${i}/${j} ]; then 
             ssh [email protected] "mkdir -p ${SSH_BASE}/${i}/${j}"
             scp ${BASE}/${i}/${j}/*.* [email protected]:${SSH_BASE}/${i}/${j}/
            fi      
        done
    fi
done

相关内容