lsでファイル名の一覧を取得する

通常「ls」コマンドを叩くと下記のように表示される。

 $ ls
aaa archive bbb bzip2 ccc dir.tar dir.zip file.zip gzip


ファイル名の一覧だけが欲しいのであればこれで良いのであるが、
この横並びの表示だとシェルスクリプト等で使い辛いのである。

今までは下記のように表示して、縦に表示させて色々と加工していたのだが・・・

 $ ls -l
合計 16
-rw-rw-rw- 1 user user 0 8月 26 2017 aaa
drwxrwxrwx 1 user user 512 8月 26 2017 archive
-rw-rw-rw- 1 user user 0 8月 26 2017 bbb
drwxrwxrwx 1 user user 512 8月 26 2017 bzip2
-rw-rw-rw- 1 user user 0 8月 26 2017 ccc
-rw-rw-rw- 1 user user 10240 8月 26 2017 dir.tar
-rw-rw-rw- 1 user user 941 8月 26 2017 dir.zip
-rw-rw-rw- 1 user user 424 8月 26 2017 file.zip
drwxrwxrwx 1 user user 512 8月 26 2017 gzip


加工がとっても面倒くさかったので、
もっと簡単にファイル名の一覧だけを縦表示できるコマンドはないかと探していた。

だが、よくよく調べてみると「ls」コマンドのオプションで
そんなことができるらしい。やばい、知らんかった・・・。

忘れないうちに早速メモっておこう。


ファイル名の一覧を縦表示にする


要するに、一行に1ファイル名のみ表示させたいのであるが、
コマンドとその結果は下記のようになる。

 $ ls -1
aaa
archive
bbb
bzip2
ccc
dir.tar
dir.zip
file.zip
gzip


おぉ!これだよ求めていたのは!
まさかオプションだけで対応できるとは思っていなかった。
もっとマニュアル読まないとだめだなぁ。


ファイルとディレクトリを分けて表示させる


ついでなので、ファイルとディレクトリを分けて表示させてみる。

名前だけだとファイルなのかディレクトリなのか判断がし辛いので、
これもオプションを使って識別できるようにしたい。

lsで下記オプションを付けるとディレクトリであれば後ろに「/」が付与される。

 $ ls -F
aaa archive/ bbb bzip2/ ccc dir.tar dir.zip file.zip gzip/


これと「-1」オプションと「grep」コマンドを組み合わせれば、
ファイル名の一覧とディレクトリ名の一覧を分けることが可能になる。

まずはディレクトリ名のみ一覧表示させてみる。
「grep」にて「/」を検索する方法が手っ取り早い。

 $ ls -1F | grep "/"
archive/
bzip2/
gzip/


こんな感じ。

続いて、ファイル名のみの一覧表示。
先程とは逆に「grep」にて「/」を除外する。

 $ ls -1F | grep -v "/"
aaa
bbb
ccc
dir.tar
dir.zip
file.zip


うむ、意外と使えそうだ。
これで無駄な文字列加工をしなくて済みそうだ。


本日は、以上で。



LinuxコマンドABCリファレンス


人気記事