LoginSignup
0
2

More than 5 years have passed since last update.

scpの結果をファイルに書き出すときに余計なものが出て困った話

Last updated at Posted at 2018-01-21

サーバのバックアップ用shellを
ちまちまと手作りしていたときに軽くはまったので備忘録として残す。

前提

環境はubuntu 16.04のはず。

取得したバックアップファイルをサーバ間で持ち合うようにしたかった。
で、サーバ間でファイルコピーするのにscpを使ったらこいつが意外に曲者だった。

scp

メモ代わりに使用例だけ。

scp -i [秘密鍵ファイル] [転送ファイル] [転送先ユーザ]@[転送先IP]:[転送先ディレクトリ]

秘密鍵 key.txt を使って local.txt を転送先サーバの user ユーザの ./remotedir にコピーするときは↓

scp -i key.txt local.txt user@xxx.xxx.xxx.xxx:./remotedir

はまったところ

標準出力に出てくる転送結果をファイルに出そうとしたら出ない。。。
何度やっても出ないのでググってみたら、みんな結構同じことで悩んでる。

で、参考にさせて頂いた方法がこちら↓

ssh -t -q -A localhost scp -i key.txt local.txt user@xxx.xxx.xxx.xxx:./remotedir >> log.txt

実行してみると確かに出力される!イケるやん!
これでlog.txtの中みて100%以外の結果が出てたらアラート出せばいいかなー、とか思ってたら。。。

再度はまったところ

log.txtにいらない行が入ってくる。。。

^Mlocal.txt                                          0%    0     0.0KB/s   --:-- ETA^Mlocal.txt                                          100% 3268     3.2KB/s   00:00

余計な改行コード(CR)と転送開始時のログ?が入ってる。
複数ファイルを転送したときには空白行も入ってくる。

うーむ。結果チェックしづらい。

問題点は以下。
- 改行コード(CR)が邪魔
- 空白行が邪魔
- ETA(Estimated Time Arrival:到着予定時刻 だそうな)の行が邪魔

軽くググってみたけど消し方が分からなかったので、
出てきたモノを取り除いて使うことにした。

余計なものが出てくるなら除いてしまえばいいじゃない

と、いう事で。
以下のコマンドで余計なものを取り除く。

sed 's/^M/\n/g' log.txt | sed '/^$/d' | grep -v ETA

^Mはctrl+V→ctrl+Mで入力可能。

今思えば^Mを改行に置き換える必要なかったけど。。。
まぁ良いか。

local.txt                                          100% 3268     3.2KB/s   00:00

これで結果チェックしやすくなった!

今回のオチ

cronでscpさせるとファイルにも結果でないですやん。。。
調べる気力暇がなくなってしまったので、
結局scpの結果じゃなくてls使ってローカルとリモートのファイルサイズを比較することに。

意味なし!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2