2つのリモートサーバーがあります。現在接続されているものと複数のファイルをコピーしたいもの(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*
これはうまくいきますが、1つずつコピーする必要なしにすべてのcsvファイルをコピーしたいと思います。
ワイルドカードを見ましたが、私の場合はうまくいきません。私もparamiko/glob
Pythonを使用することを検討しましたが、動作させることはできません。理想的にはbashシェルスクリプトを使ってこれをしたいのですが、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