回答編集履歴

2

訂正

2022/01/20 07:26

投稿

otn
otn

スコア84423

test CHANGED
@@ -43,7 +43,9 @@
43
43
  ```
44
44
 
45
45
  三点目:
46
- `mput`できるはずですが、
46
+ ~~mputできるはずですが、~~
47
+ ⇒ sftpのmputでは出来ないようです。
48
+
47
49
  > 上記の結果だと、下記のように認識されてしまいました。
48
50
 
49
51
  そのカンマは何ですかね?

1

誤り訂正

2022/01/20 07:17

投稿

otn
otn

スコア84423

test CHANGED
@@ -20,14 +20,14 @@
20
20
  LOG1=(`find /var/log/sample*.gz -mtime +0 -and -mtime -4`)
21
21
  LOG2=(`find /var/log/test/sample*.lgz -mtime +0 -and -mtime -4`)
22
22
 
23
- if [ ${#LOG1[@]} -gt 0 ]
23
+ CMD1=
24
- then CMD1="mput ${LOG1[@]}"
24
+ for a in "${LOG1[@]}"
25
+ do CMD1+="put $a"$'\n'
26
+ done
25
- else CMD1=
27
+ CMD2=
26
- fi
27
- if [ ${#LOG2[@]} -gt 0 ]
28
- then CMD2="mput ${LOG2[@]}"
28
+ for a in "${LOG2[@]}"
29
+ do CMD2+="put $a"$'\n'
29
- else CMD2=
30
+ done
30
- fi
31
31
 
32
32
  # SFTP接続
33
33
  sftp -i /home/user/.ssh/id_rsa username@aa.bb.cc.dd << END
@@ -37,23 +37,6 @@
37
37
  $CMD1
38
38
  # LOG2の3日分のログを送信
39
39
  $CMD2
40
-
41
- # SFTP切断
42
- quit
43
- ```
44
- シェルに慣れていれば、変数展開の`:+`の機能を使って、コンパクトに書けます。
45
- ```Bash
46
- LOG1=(`find /var/log/sample*.gz -mtime +0 -and -mtime -4`)
47
- LOG2=(`find /var/log/test/sample*.lgz -mtime +0 -and -mtime -4`)
48
-
49
- # SFTP接続
50
- sftp -i /home/user/.ssh/id_rsa username@aa.bb.cc.dd << END
51
- cd /log/$1/
52
-
53
- # LOG1の3日分のログを送信
54
- ${LOG1:+mput} ${LOG1[@]}
55
- # LOG2の3日分のログを送信
56
- ${LOG2:+mput} ${LOG2[@]}
57
40
 
58
41
  # SFTP切断
59
42
  quit
@@ -69,4 +52,7 @@
69
52
  `find`は改善の余地がありますが、とりあえずそのままにしてあります。
70
53
  最初から`if [ -d /var/log/test ]`で分岐する案もあるでしょう。
71
54
 
55
+ ##訂正
56
+ `mput`に複数ファイルを指定出来ないので、訂正。
72
57
 
58
+