私は次のスクリプトを書いた。年、月、日の形式で新しいディレクトリを作成します。実行する必要があるのは、スクリプトがリモートサーバー上に作成された新しく作成されたディレクトリにファイルをコピーすることです。ただし、2017-08-18と仮定するサブディレクトリの代わりにそのディレクトリにファイルをコピーするなどの操作が行われます。
[root@hostname ~]# cat ontape.sh
#!/bin/bash
#
sshpass -p 'PASSWORD' ssh root@hostname mkdir -p /home/mybackup/ontape/$(date +%Y-%m-%d)
sshpass -p 'PASSWORD' ssh root@hostname mkdir -p /mybackup/ontape_tmp_backup/$(date +%Y-%m-%d)
for server in $(cat servers.txt)
do
sshpass -p 'PASSWORD' scp /dbbackup/backupdb/ontape/fullsize/* $server
done
また、/root/servers.txt ファイルには次のコードがあります。
[root@hostname ~]# cat servers.txt
root@hostname:/mybackup/ontape_tmp_backup
root@hostname:/home/mybackup/ontape
ベストアンサー1
この行を変更し、次のように作成したディレクトリを追加する必要があります。
sshpass -p 'PASSWORD' scp /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"
存在せず、追加のコマンドが必要ない場合は、ターゲットパスに最後のレベルのディレクトリを作成するため、rsync
これを使用することもできます。mkdir
sshpass -p 'PASSWORD' rsync /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"
"$(date +%Y-%m-%d)"
宛先パスにディレクトリがない場合、ディレクトリが作成されます。
したがって、スクリプトから2つのターゲットパスにコピーして最初にディレクトリを作成したい場合は、次のスクリプトを使用して実行できます。
for dest in dest1 dest2; do
sshpass -p 'PASSWORD' rsync -av /path/to/src/* "$dest/$(date +%Y-%m-%d)"
done
ps -aux
他のユーザーがシステムにアクセスしたりコマンドを介して表示したりできるため、これらのパスワード転送方法を使用することはお勧めできません。publicKey 認証設定。
ssh-keygen -t rsa
ssh-copy-id USER@HOST