![远程 SSH 复制文件名包含特定字符串的文件](https://linux22.com/image/166902/%E8%BF%9C%E7%A8%8B%20SSH%20%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E5%90%8D%E5%8C%85%E5%90%AB%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6.png)
我有两个远程服务器。我当前已连接的一台以及我正尝试将大量文件复制到的一台 ( 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/
同样,我想对所有 、 等文件执行此操作b1
,c1
并将c2
它们复制到远程服务器上各自的位置。
我似乎找不到一种不涉及编写多行代码的方法来做到这一点。
我努力了
cd /opt/DR/output/1/a/
scp -r -v *a1* [email protected]:/data/landing/a/a1/
这是可行的,但我想复制所有*a1*
csv 文件,而不必一一复制。
我已经研究过通配符,但认为它不适用于我的情况。我也考虑过使用paramiko/glob
python,但我也无法让它工作。理想情况下,我想使用 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