現在ローカルサーバのログファイルをsftp接続し、リモートサーバへ転送するシェルスクリプトを作成しております。
その際に、ローカルサーバによってディレクトリが存在するものと存在しないサーバがあります。
そこで、シェルスクリプトでディレクトリの存在チェックを行い、存在しないものはmputコマンドを実行しないようにしたいです。(サーバ毎に中身を変えることはしたくはないです。)
■仕様
・ログファイル転送元のサーバは複数存在します。
・ログは3日分のログを転送します。
現在のプログラム
#!/bin/bash # ローカルの3日分のファイルを変数に格納 LOG1=(`find /var/log/sample*.gz -mtime +0 -and -mtime -4`) LOG2=(`find /var/log/test/sample*.lgz -mtime +0 -and -mtime -4`) # SFTP接続 sftp -i /home/user/.ssh/id_rsa username@aa.bb.cc.dd << END cd /log/$1/ # LOG1の3日分のログを送信 mput ${LOG1[0]} mput ${LOG1[1]} mput ${LOG1[2]} # LOG2の3日分のログを送信 mput ${LOG2[0]} mput ${LOG2[1]} mput ${LOG2[2]} # SFTP切断 quit END
上記を実行したところ下記のようになります。
find: '/var/log/test/sample*.gz': No such file or directory Connected to aa.bb.cc.dd sftp> cd /var/server01/ sftp> # ↓LOG1に該当ファイルが格納されたため、実行できている。 sftp> mput /var/log/sample-20220119.gz Uploading /var/log/sample-20220119.gz to /log/server01/sample-20220119.gz /var/log/sample-20220119.gz 100% 1000 10.0MB/s 00:00 省略 # ↓LOG2に該当ファイルが格納されなかったため、叩く変数が存在しない。 sftp> mput You must specify at last one path after a mput command. 省略 sftp> sftp> quit
懸念点・自分で試したこと
現状困っている点は、3点です。
▼1点目
「find: '/var/log/test/sample*.gz': No such file or directory」のようにtestディレクトリが存在しない場合に変数に格納はされないが、エラーが出てしまう。
こちらをif文を使用し、回避しようと下記のように実装しました。
if [ LOG1=(`find /var/log/sample*.gz -mtime +0 -and -mtime -4`) ]; then echo "存在する" fi
そうすると、test文の中で()は使えないとのこと。
▼2点目
上記の問題が解決できた際に、sftp接続し、mputコマンドによってファイルを転送するのですが、
sftp> mput You must specify at last one path after a mput command.
のように転送はされないようになっているが、mputコマンド自体は叩いてしまっているので、1点目の存在チェックで存在しないと判定された場合、mputコマンドを実行しないようにしたい。
こちらもif文等で試してみましたが、そもそもsftpでif文は使えないのでは?と思い、詰まっている状況です。
▼3点目
現状3日分のファイルを転送するために、mputコマンドを3回ずつ叩くようにしているが、1回のmputコマンドで
3日分のログファイルを転送することが出来るか。
こちらは、mput ${LOG1[@]}など、忘れてしまいましたがその他にも試行錯誤は行いました。
上記の結果だと、下記のように認識されてしまいました。
mput /var/log/sample-20220119.gz , /var/log/sample-20220118.gz, /var/log/sample-20220117.gz
上記の問題について解決方法がお分かりの方がいらっしゃいましたらご教授頂けますと幸いです。
1点目、2点目、3点目全てご回答頂かなくても1つのご回答でも大変助かります。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/01/20 05:15
退会済みユーザー
2022/01/20 06:30
2022/01/20 06:59
2022/01/20 07:08
退会済みユーザー
2022/01/20 09:19 編集