ファイル名に特定の文字列を含むリモートSSHコピーファイル

ファイル名に特定の文字列を含むリモートSSHコピーファイル

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/globPythonを使用することを検討しましたが、動作させることはできません。理想的には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

おすすめ記事