scp ファイルを新しいディレクトリにコピー

scp ファイルを新しいディレクトリにコピー

私は次のスクリプトを書いた。年、月、日の形式で新しいディレクトリを作成します。実行する必要があるのは、スクリプトがリモートサーバー上に作成された新しく作成されたディレクトリにファイルをコピーすることです。ただし、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 

おすすめ記事