以前、Macでtreeコマンドを使うの記事を書いたことがありました。 今回は、 WSL の Ubuntu で tree コマンドを使ってみました。
環境
- Ubuntu 16.04
Windows の tree コマンド
tree コマンドは Windows にもあって、 C:\Windows\System32\tree.com がそれのようです。 拡張子は、 .exe ではなくて、 .com のようでした。
PS C:\Users\user\Pictures> tree
フォルダー パスの一覧: ボリューム Local Disk
ボリューム シリアル番号は 620B-xxxx です
C:.
├─Camera Roll
└─Saved Pictures
フォルダーの構造を表示してくれます。
WSL の Ubuntu からも Windows のコマンドが呼び出せるようで、 /mnt/c/Windows/System32/tree.com のコマンドを実行してみました。 パスが通っているようで、 tree.com でも実行はできるみたいです。
$ /mnt/c/Windows/System32/tree.com ./
Folder PATH listing for volume Local Disk
Volume serial number is 0000xxxx 620B:xxxx
C:\WINDOWS\SYSTEM32\
Invalid path - \WINDOWS\SYSTEM32\
No subfolders exist
カレントディレクトリーが変わってしまうようでした。
それから、今回、 Ubuntu 側のディレクトリーを扱いたかったのですが、 Windows のアプリから Ubuntu 側のディレクトリーを扱うのはよくないそうなので、おとなしく Ubuntu の tree を使おうと思いました。
install
Ubuntu の tree をインストールします。
リポジトリーに tree コマンドのパッケージがあるみたいなので、 apt install
でインストールしてみます。
$ sudo apt install tree
[sudo] password for user:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
tree
0 upgraded, 1 newly installed, 0 to remove and 67 not upgraded.
Need to get 40.6 kB of archives.
After this operation, 138 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial/universe amd64 tree amd64 1.7.0-3 [40.6 kB]
Fetched 40.6 kB in 2s (14.9 kB/s)
Selecting previously unselected package tree.
(Reading database ... 26614 files and directories currently installed.)
Preparing to unpack .../tree_1.7.0-3_amd64.deb ...
Unpacking tree (1.7.0-3) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up tree (1.7.0-3) ...
インストールできたみたいです。
tree コマンド
tree
コマンドを使ってみます。
$ tree
.
├── css
│ └── style.css
├── img
│ ├── apple-touch-icon.png
│ ├── favicon.png
│ └── logo.png
└── js
└── script.js
3 directories, 5 files
Ubuntu の tree コマンドが使えているようです。
アンインストール
Remove a Package: Removal of a package (or packages) is also straightforward. To remove the package installed in the previous example, type the following:
sudo apt remove nmap
アンインストールをあまりすることがなくて忘れてしまうのですが、 apt remove
でアンインストールできるようです。
$ sudo apt remove tree
終わり
Windows で Linux が使えるといっても、制約があることがやっぱり面倒で、 macOS を使った方がいいとも思うところでした。
参考
- WSL その51 - BashからWindowsコマンドを呼び出すコマンドの実行例 - kledgeb
- WSL その60 - WindowsアプリからUbuntu環境内のファイルを決していじってはならない - kledgeb
26 April 2018 追記
もう少し WSL の Ubuntu から Windows の tree コマンドを使う方法を確認してみました。
$ /mnt/c/Windows/System32/tree.com ./
Folder PATH listing for volume Local Disk
Volume serial number is 0000xxxx 620B:xxxx
C:\WINDOWS\SYSTEM32\
Invalid path - \WINDOWS\SYSTEM32\
No subfolders exist
この記事の最初に Windows の tree コマンドを実行したときの、このエラー。
C:\WINDOWS\SYSTEM32\ のパスが渡されているにも関わらず、 Invalid path として \WINDOWS\SYSTEM32\ というパスを出力しています。
:
(コロン)がうまく渡せていないのかな、と思いました。
$ tree.com C:\Users\user\Pictures
Folder PATH listing for volume Local Disk
Volume serial number is 0000xxxx 620B:xxxx
C:\WINDOWS\SYSTEM32\USERSUSERPICTURES
Invalid path - \WINDOWS\SYSTEM32\USERSUSERPICTURES
No subfolders exist
別のフォルダーのパスを渡しても Invalid path - \WINDOWS\SYSTEM32\USERSUSERPICTURES のエラーになりました。 C: が消えてしまっています。 それから、 C:\WINDOWS\SYSTEM32\ が基準のフォルダーになってしまっていて、その下に USERS フォルダーがあるように認識されてしまっています。 USERS フォルダー以降の \ マークもなくなってしまっています。
$ tree.com "C:\Users\user\Pictures"
Folder PATH listing for volume Local Disk
Volume serial number is 0000xxxx 620B:xxxx
C:\USERS\USER\PICTURES
ダブルクォーテーションでパスを囲んでみました。 すると、エラーはなくなりました。
でも、 Windows からは見えていた Camera Roll と Saved Pictures は出力されませんでした。 空のディレクトリーであるかのように見えてしまっています。
特殊なフォルダーなのかな、と思って、普通のフォルダーを作ってみました。 そして、まず Windows の tree コマンドで確認してみました。
PS C:\Users\user\Pictures> tree
フォルダー パスの一覧: ボリューム Local Disk
ボリューム シリアル番号は 620B-xxxx です
C:.
├─Camera Roll
├─fol1
│ ├─fol11
│ └─fol12
└─Saved Pictures
fol1 と、その下に fol11 と fol12 を作成しました。
そして、 Ubuntu から Windows の tree コマンドで確認してみました。
$ tree.com "C:\Users\user\Pictures"
Folder PATH listing for volume Local Disk
Volume serial number is 0000xxxx 620B:xxxx
C:\USERS\USER\PICTURES
fol11
fol12
なぜか Pictures の下に fol11 と fol12 があるかのような出力になってしまっています。
おとなしく Ubuntu の tree コマンドを使おうと思います。