ls コマンド 2016/07/22
ディレクトリの中のファイル一覧を出力するコマンド。
Windowsでいうところのdirコマンド。
ディレクトリを再帰的にたどって表示したい場合はfindコマンドを使う。
JavaやRubyなどの中でファイル一覧を取得する方法は ディレクトリの中のファイル一覧を取得する方法 参照。
CentOSだと以下のようにalias設定されているかも。
alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null
インストール 2016/03/17
Coreutilsというパッケージに入っているので、CentOSにもUbuntuにも始めから入っている。
オプション 2016/10/17
-a- ファイル名がドットで始まるものも含めてすべてを表示。 これを付けないと隠しファイル(=ファイル名がドットで始まるもの)は表示されない
-C- 複数列で表示。
lsは標準出力が端末の場合にはこれがデフォルト。 標準出力がパイプの場合には、デフォルトでは1ファイル1行で縦に並べて出力されるが、 このオプションをつけると端末の場合と同様に横に並べてくれる。 逆に標準出力が端末であっても1ファイル1行にしたい場合は-1を付ける。 -d- 引数にディレクトリを指定すると普通はそのディレクトリの中のファイル一覧を表示するが、 このオプションを付けると、ディレクトリそのものを表示する
-f- ファイル名でのソートをしない。ディレクトリにあまりに大量のファイルがある場合に
デフォルトだとソートに時間がかかってしまうので、
これを付けることで表示速度がましになる。
-lやソートのオプションとの両立ができないみたい。findコマンドでは、デフォルトでソートされない。 -F- ファイルの種類ごとにファイル名の後ろに次の記号をつける。
@: シンボリックリンク(-lを付けていると表示されないかもしれない)、/: ディレクトリ、*: 実行可能ファイル、|: 名前付きパイプ。 -g-lとよく似ているが、ファイルオーナーのグループ名を表示しない。-gをつければ-lは付けても付けなくてもおなじになる。-h,--human-readable-lや-gオプションをと受けたときのファイルサイズの表示を、K,Mなどの単位を付けて 人間が読みやすいように表示。--help- ヘルプ表示
-i- inodeの番号を表示。inode番号が同じ2ファイルがあれば、それはハードリンクである。
-l- ファイル名だけでなくタイムスタンプやパーミッション、オーナーの情報も表示
-r- 逆順に表示。デフォルトではアルファベットの逆順。
-tと併用するとタイムスタンプの古い順。 -R,--recursive- ディレクトリがあった場合はその中を再帰的に表示
-s- そのファイルが占めるブロック数を表示
-S- ファイルサイズの大きい順にソートして表示
-t- タイムスタンプの新しい順にソートして表示
--version- バージョン表示
-1(イチ)-Cの反対で、標準出力が端末であっても1ファイルを1行で縦に並べて出力する。
-- というパラメータを渡すとそれ以降のパラメータをオプションではなくファイル名やディレクトリ名とみなしてくれるので、
- で始まる名前を扱いたい場合に使うとよい。
タイムスタンプを秒まで表示するには 2017/01/18
--full-time というオプションでファイルの更新時刻を秒まで表示してくれる。
$ ls --full-time
この場合、 -l はあってもなくても同じ。
タイムスタンプを YYYY-MM-DD hh:mm:ss のフォーマットで表示するには
2017/01/18
$ ls -l --time-style="+%Y-%m-%d %H:%M:%S"
dateコマンドでの指定のしかたと似ているかも。
findコマンドの場合
find . -printf "%M %n %u %g %k %TY-%Tm-%Td %TH:%TM:%TS %p\n"
タイムスタンプの新しい順にファイル一覧を表示するには 2017/03/10
$ ls -lt
とすればよい。古い順にするには
$ ls -ltr
とする。
秒まで表示するには
$ ls -t --full-time
または
$ ls -tr --full-time
とする。
-tというオプションを知らなかったときは以下の方法を使っていた。
$ ls -alF --time-style="+%Y-%m-%d %H:%M:%S" | sort -r -k6,7
逆に古い順にソートするには
$ ls -alF --time-style="+%Y-%m-%d %H:%M:%S" | sort -k6,7
ディレクトリを階層的にたどってすべてのファイルを新しい順に並べるにはlsコマンドでなく、
findコマンドを使う。