lsコマンドの使い方。覚えておくと便利なオプションも解説。

Linux

Linuxで作業をおこなう上では、lsコマンドは必須のコマンドになります。
使わない人はいないでしょう。


しかし、「-l」とか「-a」といった超メジャーなオプションのみを使っており、便利なオプションを使いこなしていない人が多いように思います。
今回は、lsコマンドのオプションについて、知っていればちょっと便利なオプションについて紹介していきます。


そもそもですが、lsは「ListSegment」の略です。
日本語では、”セグメントをリスト表示する”でしょうか。


lsコマンドだけ実行すると、カレントディレクトリに存在するファイルやフォルダの一覧を表示します。

$ ls
aaa.txt  folder

q


カレントディレクトリではなく、一覧を表示したいフォルダを指定すれば、指定したフォルダ配下の一覧を表示します。

$ ls  ./folder/
folder2  xyz.txt

以下から各オプションについて説明していくのですが、オプションを複数指定したい場合は、ハイフン(-)の後に使用したいオプションを連続して指定すればよいです。
「-l」と「-a」オプションを同時に使用したい場合は、「ls -la」と記述する、といった感じです。


全部表示する(-a,-A)


全てのファイルを表示する場合は「-a」オプションです。
もしくは「-all」。
通常は表示されない、先頭にピリオド「.」が付くファイルも表示します。
カレントを表現する「.」と、一つ上階層を表現する「..」も表示します。


$ ls -a
.  ..  .env.sh  aaa.txt  folder

小文字の「a」ではなく大文字の「A」を使用すると、「.」「..」は除外された形で表示されます。
もしくは「–almost-all」。


$ ls -A
.env.sh  aaa.txt  folder

バックアップファイルを表示しない(-B)


linuxが生成するバックアップファイルには、末尾に”~”(チルダ)が付きます。
このバックアップをファイルを表示したくない場合は「-B」オプションを使用します。
もしくは「–ignore-backups」。


1.「-B」を付けない場合

$ ls
aaa.txt  bbb.txt  ccc.txt  ccc.txt~  folder

2.「-B」を付けた場合

$ ls -B
aaa.txt  bbb.txt  ccc.txt  folder

出力時の色を指定する(–color)


出力時の表示色を指定する場合は「–color[=WHEN]」を指定します。
WHENには、’auto”always”never’の3パターンが指定できます。
デフォルトは’auto’です。


1.’auto’を使用。

$ ls -l --color=auto

環境設定に定義されている色に従って、表示結果の色付けをおこないます。
環境設定に定義されている表示色は、「$ dircolors -p」で確認できます。


$ dircolors -p
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a

2.’always’を使用

$ ls -l --color=always

常に色表示を有効にします。
例えば、ls の結果をパイプで繋いで絞り込んだ場合、色指定が消えてしまうときがあります。
これを防ぎます。
常に環境変数に定義されている色指定を有効にします。


3.’never’を使用

$ ls -l --color=never

色表示を行いません。


ディレクトリのみを表示する(-d)


ディレクトリのみを表示する場合は「-d」オプションです。
もしくは「–directory」。


正確には、ディレクトリのみを表示する場合は「-d」オプションを付けるだけではなく、もう一工夫が必要です。
以下のようにします。
カレントディレクト配下のディレクトリのみを表示する場合です。


$ ls -d */
folder1/  folder2/

様々なソート方法


ファイル・ディレクトリのソートについて、様々なソートをおこなうことができます。


1.ディレクトリ昇順でソート(-f)

「ディレクトリ昇順」とは、Linuxのファイルシステムが設定する順番です。
なので、ソートせずに表示していることと同等となります。


$ ls -f
.  folder1  xyz.txt  ..  folder2

2.逆ソート(-r)

ソート順を逆にしてソートをおこないます。
「-r」もしくは「–reverse」になります。


$ ls
aaa.txt  bbb.txt  ccc.txt  ccc.txt~  folder  link
$ ls --reverse
link  folder  ccc.txt~  ccc.txt  bbb.txt  aaa.txt

3.ファイルサイズでソート(-S)

ファイルサイズの降順でソートをおこないます。


$ ls -lS
total 20
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt

4.更新日時でソート(-t)

更新日時の降順でソートをおこないます。


$ ls -lt
total 20
lrwxrwxrwx 1 oops.jp-sakusaku LolipopUser   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt
drwxr-xr-x 4 oops.jp-sakusaku LolipopUser 4096 2020-01-05 01:26 folder
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   20 2020-01-05 00:27 ccc.txt~
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 oops.jp-sakusaku LolipopUser   12 2020-01-05 00:26 aaa.txt

5.アクセス日時でソート(-u)

アクセス日時の降順でソートをおこないます。


$ ls -lu
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 17:06 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 17:06 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-12 12:02 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-12 12:02 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

6.ファイルの拡張子でソート(-X)

ファイルの拡張子でソートをおこないます。
拡張子のアルファベット順になります。


$ ls -lX
total 20
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt
-rw-r--r-- 1 xxx yyy    0 2020-01-12 14:19 aaa.exe
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~

ファイルタイムスタンプを秒まで表示(–full-time)


通常、ファイルのタイムスタンプは分までしか表示されないですが、秒まで表示することもできます。
「–full-time」を指定します。


$ ls --full-time
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26:52.42195666 +0900 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27:28.51452186 +0900 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28:28.96779361 +0900 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27:47.82928918 +0900 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26:07.22816214 +0900 folder

オーナーを表示しない(-g)、グループを表示しない(-G)


通常は、オーナーとグループが表示されますが、それぞれを表示しない出力も可能です。

オーナーを表示したくない場合は「-g」オプションを指定します。


$ ls -la
total 20
-rw-r--r-- 1 yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 yyy 4096 2020-01-05 01:26 folder

グループを表示したくない場合は「-G」オプションを指定します。
もしくは「–no-group」。


$ ls -lG
total 20
-rw-r--r-- 1 xxx   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx 4096 2020-01-05 01:26 folder

また、オーナーのみを表示したい場合は「-o」オプションを指定でもOKです。


$ ls -o
total 20
-rw-r--r-- 1 xxx   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

1024の累乗ではなく100の累乗でサイズ表示する(–si)


通常、1024の累乗でファイル表示をおこないますが、1000の累乗でサイズ表示。


1.1024の累乗

$ ls -la
total 28
drwxr-xr-x 3 xxx yyy 4096 2020-01-05 00:28 .
drwx-----x 6 xxx yyy 4096 2020-01-05 00:27 ..
-rw-r--r-- 1 xxx yyy    0 2019-11-19 01:28 .env.sh
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder

2.1000の累乗

$ ls -la --si
total 29k
drwxr-xr-x 3 xxx yyy 4.1k 2020-01-05 00:28 .
drwx-----x 6 xxx yyy 4.1k 2020-01-05 00:27 ..
-rw-r--r-- 1 xxx yyy    0 2019-11-19 01:28 .env.sh
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4.1k 2020-01-05 01:26 folder

ファイルのインデックス番号を表示する(-i)


Linuxにファイルに付与しているインデックス番号を表示することができます。
「-i」もしくは「–inode」になります。


$ ls -li
total 20
25566879 -rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
25566875 -rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
25566878 -rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
25566868 -rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
25566958 drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
25559629 lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

リスト形式で表示する(-l)


ファイル名のみの表示ではなく、オーナー・グループ・サイズといったファイルの属性情報を含めてリスト形式で表示します。


$ ls -l
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

キロバイトでファイルサイズを表示する(-k)


ファイルサイズをバイト表示ではなく、キロバイト表示します。


$ ls -lk
total 20
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy 1 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy 1 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

シンボリックリンクはリンク先パスを表示しない(-L)


シンボリックリンクのリンク先パスを表示したくない場合は「-L」オプションを使用します。


$ ls -lL
total 24
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 link

ファイルリストをカンマ区切りで表示する(-m)


ファイルリストをカンマ区切りで表示することができます。
「-m」オプションです。
出力結果を加工する際に便利です。


$ ls -m
aaa.txt, bbb.txt, ccc.txt, ccc.txt~, folder, link

オーナーとグループを文字列ではなくID表示(-n)


オーナーとグループはID(数値)をもっています。
「-n」オプションを使用すると、ID表示をおこなうことができます。


$ ls -n
total 20
-rw-r--r-- 1 1421071 1000   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 1421071 1000   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 1421071 1000   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 1421071 1000   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 1421071 1000 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 1421071 1000   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

ダブルクォーテーションでファイル名を囲む(-Q)


ファイル名をダブルクォーテーションで囲むことができます。
「-Q」もしくは「–quote-name」になります。


$ ls -Q
"aaa.txt"  "bbb.txt"  "ccc.txt"  "ccc.txt~"  "folder"  "link"

再帰的にlsコマンドを実施(-R)


lsコマンドを実施するフォルダの中に存在するフォルダに対してもlsコマンドを実行し、再帰的に結果を表示します。
「-R」もしくは「–recursive」になります。


「再帰的」に結果を表示するので、フォルダの中にフォルダ(フォルダがネスト)が存在していて、全てのファイルを一覧表示する時に便利です。


$ ls -lR
.:
total 20
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:26 aaa.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 bbb.txt
-rw-r--r-- 1 xxx yyy   12 2020-01-05 00:28 ccc.txt
-rw-r--r-- 1 xxx yyy   20 2020-01-05 00:27 ccc.txt~
drwxr-xr-x 4 xxx yyy 4096 2020-01-05 01:26 folder
lrwxrwxrwx 1 xxx yyy   41 2020-01-05 20:41 link -> /home/users/0/oops.jp-sakusaku/ls/aaa.txt

./folder:
total 8
drwxr-xr-x 2 xxx yyy 4096 2020-01-05 01:26 folder1
drwxr-xr-x 2 xxx yyy 4096 2019-11-19 01:13 folder2
-rw-r--r-- 1 xxx yyy    0 2019-11-19 01:13 xyz.txt

./folder/folder1:
total 0

./folder/folder2:
total 0

ファイル名だけを行表示(-1)


あんまり知っている人が少ないかと思いますが、ファイル名だけを表示することができます。
「-1」オプションになります。


$ ls -1
aaa.exe
aaa.txt
bbb.txt
ccc.txt
ccc.txt~
folder
link


MySQLデータのインポートとエクスポート!圧縮と解凍する方法を紹介

Linux

こんにちは。
さくさくTECHブロガーのさくです。


今回は、Linux + MySQL の環境において、シェルを使ってエクスポートとインポートをおこなう方法を紹介します。


どういった場面を想定しているかといいますと、一番は定期実行のバッチですね。
例えば、1日1回、特定テーブルのデータをエクスポートする、といった要件があった場合。


その場合、エクスポートするコマンドをシェル化してクーロンに設定すると思います。
そういった時に使える手法です。


インポートについては、例えば実データが壊れてしまった場合の復旧ですね。
エクスポートしたデータをインポートすれば、データは元通りになります。


環境情報


OS:Linux
DB:MySQL


MySQLには「saku」というDBを準備します。
そのDBには「person」というテーブルが存在します。
テーブル構成は以下。


mysql> desc person;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| personID | int(11)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(32)  | NO   | MUL | NULL    |                |
| kana     | varchar(128) | NO   |     | NULL    |                |
| address  | varchar(512) | YES  |     | NULL    |                |
| gender   | char(1)      | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

また、あらかじめデータも格納しておきます。

mysql> select * from person;
+----------+--------+--------------+-----------+--------+
| personID | name   | kana         | address   | gender |
+----------+--------+--------------+-----------+--------+
|        4 | 山田   | ヤマダ       | 東京      | 0      |
|        5 | 高橋   | タカハシ     | 神奈川    | 0      |
|        6 | 田中   | タナカ       | 千葉      | 1      |
+----------+--------+--------------+-----------+--------+
3 rows in set (0.00 sec)

このテーブルに対して、エクスポート、および、インポートをおこないます。


エクスポート

まずはエクスポート。
エクスポートする条件も指定します。
「gender」が「1」のレコードのみをエクスポートします。
シェルは以下になります。

#!/bin/sh
# 
# エクスポートシェル
# 
mysqldump -h localhost \--single-transaction --skip-opt --extended-insert --quick --set-charset --no-create-info --no-autocommit \
  -u ※ユーザ名 -p※パスワード -h ※ホスト名 ※DB名 person \
  --where="gender = '0'" \
  | gzip > person.sql.gz 2>&1 | tee -a export.log

使用するコマンドは mysqldump コマンドです。
mysqldump コマンドで、「gender」が「1」のレコードのみをエクスポートします。
かつ、エクスポートするファイルはperson.sql.gzという圧縮ファイルとして出力し、エクスポート時のログをexport.logに出力します。


エクスポート結果を圧縮することで、仮に大量データをエクスポートすることになったとしても、ある程度はディスク使用率おさえることができます。


様々なオプションを指定していますが、各オプションの用途は以下になります。


オプション

説明

–single-transaction

これを設定しておくと、InnoDBについてエクスポートする際、他SQLがロックされないです。運用中システムについてエクスポートする際は、このオプションを指定した方が無難。

–skip-opt

「–opt」の設定をオフにします。

「–opt」の設定の中に「–add-locks」がありますが、これが有効だとエクスポート中にテーブルがロックされてしまう可能性があります。

それを防ぐために、–skip-optを設定して、「–opt」の設定をオフにします。

–extended-insert

出力されるダンプファイルについて、バルクインサートの形でSQLを作成します。

–quick

MySQLのマニュアルをみる限りでは、大量データをエクスポートする際はつけた方がいいみたいです。意味を理解しきれませんでしたが、たぶん、メモリ上にエクスポートデータを展開するタイミングの話のようです。このオプションを指定した方が、より高速なやり方を実施するようです。

–set-charset

出力するエクスポートするファイルに SET NAMES default_character_set を出力します。

–no-create-info

エクスポートするファイルに CREATE文を出力しません。

–no-autocommit

エクスポートするファイルに AutoCommitをオフにします。

具体的には、エクスポートするファイルのSQL先頭に「set autocommit=0;」を出力します。

かつ、最後に「commit;」を出力します。


エクスポートはこんな感じです。
エクスポートが完了するとperson.sql.gzというファイルが作成されます。


インポート


次にインポート。
インポートは、エクスポートシェルで作成したperson.sql.gzを解凍して、解凍したファイルを参照してインポートします。


シェルは以下になります。

#!/bin/sh
# 
# インポートシェル
# 
gunzip -d person.sql.gz >> insert.sql
mysql -u ※ユーザ名 -h ※ホスト名 -D ※DB名 -p※パスワード < insert.sql 2>&1 \ | tee -a import.log

まずは guzip コマンドで解凍して、「insert.sql」を出力。
gunzipに-d オプションをつけているので、元ファイルの「person.sql.gz」を削除して「insert.sql」に解凍結果を出力。


インポート自体はmysqlコマンドで実行しています。
リダイレクト「<」を指定して、解凍したSQLファイルをそのままインポートします。


まとめ


いかがでしたでしょうか?


今回はたった3行しか入っていないテーブルに対してのエクスポートなので性能は意識する必要はないのですが、数億件のエクスポートする場合は性能が大事になります。
紹介したオプションを指定すれば、極力、サーバ性能に沿ったパフォーマンスを出せると思っています
参考にしてください。


それではまた!



TeraTermマクロを使って、Linux上の指定ファイルダウンロードを自動化

Linux

Linuxのシステムを保守している技術者が日々直面するシーンとして、”特定のログファイルを取得する”という場面があるかと思います。


例えば、一日に1回、アプリケーションのログやミドルウェアのログを収集して、変なエラーが出てないか?を調査したりする場合ですね。


特に、サービスのローンチ直後はよくある場面かと思います。


今回は、TeraTermマクロを使って、ログイン→圧縮ファイル作成→ダウンロードを自動的に実施するマクロを紹介します。


いちいち、ログインしてー、ファイル圧縮してー、ダウンロードしてー、って面倒ですもんね!?

環境情報

今回は、WindowsマシンにTeraTermがインストールされている状態を前提とします。

TeraTermを使って、Linuxサーバにログインします。


  • クライアントOS:Windows7
  • ターミナルエミュレータ:TeraTerm
  • サーバOS:Linux

マクロを使って自動ログイン

自動ログインの部分は、以前、作成した記事を参照してください。



今回は、“パスの指定” “ダウンロード” の部分を中心に解説していきます。


マクロで自動ログインしてダウンロードまで

とりあえず、作成したマクロを紹介します。

このマクロで、“自動ログイン”→”対象フォルダへの移動”→”圧縮してダウンロード”が可能です。


; sample TeraTerm Macro
;
; FILE:     fileGet.ttl
; create:   2019/07/21
; Author:   SakuSaku

call login
call setCur
call dwnload
sendln 'exit'
end

;
; ログイン
;
:login
    ; ホスト名とログインアカウントを定義
    host = 'sakusaku.com:22'
    account = 'sakusaku'

    ; リモート認証に必要な固定文字列を定義
    msg = 'Enter password for user '
    strconcat msg account
    passwordbox msg 'Get password'

    ; 「msg」を作業領域とし、リモート認証に必要な文字列を作成する
    msg = host
    strconcat msg '/ssh /auth=password /user='
    strconcat msg account
    strconcat msg ' /passwd='
    strconcat msg inputstr

    ; 認証する
    connect msg
return

;
; 指定フォルダに移動
;
:setCur
    ; 入力できる状態までまつ
    wait '$ '

    ; フォルダを入力
    inputbox 'フォルダを指定してください(/区切り):' 'フォルダ入力'
    strscan inputstr '/'
    if result <= 0 then
        messagebox '正しいパスを指定して下さい' 'エラー'
        end
    endif

    ; 指定されたフォルダに移動
    cmd = "cd "
    strconcat cmd inputstr
    sendln cmd
return

;
; ダウンロード
;
:dwnload
    ; 入力できる状態までまつ
    wait '$ '

    ; テキストファイルを、すべてzipファイル化
    cmd = "find *.txt | zip -@ file.zip"
    sendln cmd

    ; 入力できる状態までまつ
    wait '$ '

    ; 圧縮ファイルのフルパスを取得
    sendln 'pwd'
    recvln
    recvln
    zipFile = inputstr
    strconcat zipFile '/file.zip'

    ; ダウンロード先のフルパスを取得
    getdir localfile
    strconcat localfile '/file.zip'

    ; ファイルをダウンロード
    scprecv zipFile localfile

return

それでは、ポイントを説明していきます。

ダウンロードマクロのポイント

loginメソッドのマクロについては、以下の記事を参照してください。


フォルダの指定はユーザ指定が可能

このマクロは、Linux上に存在する特定フォルダ配下のファイルを圧縮して、マクロが存在するクライアントPCの指定フォルダに圧縮ファイルをダウンロードします。


圧縮するファイルが存在するLinux上のフォルダですが、このマクロではユーザによる指定を可能としています。


マクロの「setCur」メソッドが、該当箇所になります。

具体的には以下の箇所。


    inputbox 'フォルダを指定してください(/区切り):' 'フォルダ入力'
    strscan inputstr '/'
    if result <= 0 then
        messagebox '正しいパスを指定して下さい' 'エラー'
        end
    endif

inputboxで入力ダイアログを表示し、受け取った文字列に「」’/’を付加して、パスを作成しています。


フォルダ入力ダイアログ

マクロが存在するフォルダにダウンロード

ダウンロードするまでに、いくつかの処理があります。


まずは、圧縮ファイルを作成しています。

拡張子が「txt」のファイルを検索して、file.zipという圧縮ファイルにまとめています。

    ; テキストファイルを、すべてzipファイル化
    cmd = "find *.txt | zip -@ file.zip"
    sendln cmd

次に圧縮ファイルのフルパス作成です。

ここでのフルパスは、Linux上にzipファイルのフルパスです。

現在フォルダ(pwd) + file.zip としています。

    ; 圧縮ファイルのフルパスを取得
    sendln 'pwd'
    recvln
    recvln
    zipFile = inputstr
    strconcat zipFile '/file.zip'

最後にファイルダウンロードです。

 

注意しなければいけないのが、「localfile」になります。

これは、”マクロが存在する場所”になります。

 


ダウンロード自体は簡単で、「scprecv」を呼び出すだけです。

「scprecv」で、セキュアなファイルダウンロードが可能になります。

    ; ダウンロード先のフルパスを取得
    getdir localfile
    strconcat localfile '/file.zip'

    ; ファイルをダウンロード
    scprecv zipFile localfile

まとめ

いかがでしたでしょうか?

TeraTermマクロを使って、ファイルをダウンロードするやり方がわかったかと思います。

まとめ
  • ユーザ入力は「inputbox 」で表示可能
  • ファイルのダウンロードは「scprecv 」

それではまた。