teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

訂正

2022/01/20 07:26

投稿

otn
otn

スコア86363

answer 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

スコア86363

answer 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
@@ -41,24 +41,7 @@
41
41
  # SFTP切断
42
42
  quit
43
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
44
 
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
-
58
- # SFTP切断
59
- quit
60
- ```
61
-
62
45
  三点目:
63
46
  `mput`できるはずですが、
64
47
  > 上記の結果だと、下記のように認識されてしまいました。
@@ -69,3 +52,6 @@
69
52
  `find`は改善の余地がありますが、とりあえずそのままにしてあります。
70
53
  最初から`if [ -d /var/log/test ]`で分岐する案もあるでしょう。
71
54
 
55
+ ##訂正
56
+ `mput`に複数ファイルを指定出来ないので、訂正。
57
+