scpの入力としてfindコマンドの結果を使用してリモートサーバーを自分のローカルシステムにバックアップする

scpの入力としてfindコマンドの結果を使用してリモートサーバーを自分のローカルシステムにバックアップする

/var/lib/jenkins/jobsリモートコンピュータにjenkinsがあり、パイプラインスクリプトがパスに.xml形式のファイルとして保存されています。以下を使用して、そのフォルダの.xmlファイルを簡単に一覧表示できます。

find /var/lib/jenkins/jobs -name config.xml

結果:

/var/lib/jenkins/jobs/productA/config.xml
/var/lib/jenkins/jobs/productB/config.xml
/var/lib/jenkins/jobs/productC/config.xml
/var/lib/jenkins/jobs/productD/config.xml
/var/lib/jenkins/jobs/productE/config.xml

私のローカルコンピュータで、リモートコンピュータ上のフォルダの再帰的なコピーを作成できました(リモートファイルをローカルコンピュータに)。

scp -r [email protected]:/var/lib/jenkins/jobs/ /mnt/c/backupJenkins/

私がしたいことは質問の冒頭で説明した内容を見つけてくださいscp

フォーラムに非常に似た質問がありました。ただし、ローカルシステムからfindコマンドを使用してリモートで送信します。

scp --exec=`find <path> -name <expression>` user@host:<path_where_to_copy>

以下は、インターネットの調査と修正に基づいて試しましたが、うまくいかなかったいくつかのことです。

scp [email protected]:$`find /var/lib/jenkins/jobs -name config.xml` /mnt/c/backupJenkins
for f in `find /var/lib/jenkins/jobs -name config.xml` ; do 
scp [email protected]/$f /mnt/c/backupJenkins
done

scp コマンドは次のとおりです。

scp [other options] [source username@IP]:/[directory and file name] [destination username@IP]:/[destination directory]

-p「追加オプション」では、パラメータを渡すとフォルダ構造も維持できると思います。

ベストアンサー1

単一のコマンドでは動作しませんが、両方のコマンドでは動作します

コマンドA:ssh [email protected] 'cd /var/lib/jenkins/jobs; find . -name config.xml ! -path '*/backup*' | rsync -avz --files-from=- . ./backup'

'cd /var/lib/jenkins/jobs;- リモートシステムでsshを使用した後、ディレクトリを/var/lib/jenkins/jobsに変更しました。

find . -name config.xml ! -path '*/backup*'- その後、「/backup」フォルダパスを見つけて除外すると、rsyncが「backup」フォルダを再帰的にコピーするのを防ぎます。

rsync --files-from=- SRC/ DST/このrsyncコマンド形式を使用してパラメータを追加します-avz--files-from=-

| rsync -avz --files-from=- . ./backup'- ここで単一ダッシュ - ファイル名は、UNIXツール間の一般的な規則であるSTDINを表します。

コマンドB rsyncを使用してSSH経由でリモートサーバーからローカルサーバーにファイルをコピーし、ローカルシステムの新しいフォルダDAY-MONTH-YEAR(/mnt/c/backupJenkins/$(/bin/date)に保存します。) d-%m-%Y) )

コマンドB:rsync -avz [email protected]:/var/lib/jenkins/jobs/backup/* /mnt/c/backupJenkins/$(/bin/date +%d-%m-%Y)

おすすめ記事