UNIX - コマンドリファレンス - ファイル・ディレクトリ表示 ls

 クラウディア
1. 概要
2. 主なオプション
3. 秒単位で表示
4. ワイルドカード
5. ファイルのみ

1. 概要

 「FreeBSD」の「man」の記述を引用すると
ls は file で指定されたファイル名およびオプションの指定にしたがって、ファイルに関する各種の情報を表示します。なお、 file としてディレクトリが指定された場合は、そのディレクトリ配下のファイルに関する情報を表示します。

file が指定されなかった場合は、カレントディレクトリのファイルを表示します。表示はファイル名のアルファベット順にソートされます。ただし、 file としてディレクトリファイルとそれ以外のファイルを混在して指定した場合は、ディレクトリ以外のファイルが先に表示され、その後ディレクトリ配下のファイルが表示されます。
 基本形は、

ls [オプション] [ディレクトリ名・・・]
 で、ファイル・ディレクトリの情報を表示します。  最も多く使うコマンドのひとつです。  指定したディレクトリに含まれるファイルの情報を表示します。ディレクトリ名を省略するとカレント・ディレクトリの情報を表示します。  本ページは、下記のサイトを参考にさせていただきました。
ls コマンドで秒を表示する方法(タイムスタンプの書式指定) 」
「【Linux】lsコマンドでファイルのみを表示する方法 #Linuxコマンド

2. 主なオプション

 主なオプションには、以下のものがあります。
オプション 意    味  備考 
-d ディレクトリのみを表示
-F ファイルの区別がわかるように表示する
 ディレクトリ名 = '/'
 実行ファイル = '*'
 シンボリックリンク = '@'
-f ファイル名をソートせずに表示
-t 時刻順に表示
-R 指定したディレクトリ以下の階層のディレクトリの内容を全て表示
-a . で始まるファイルも表示
-l ディレクトリ・ファイルの属性を表示
-r ソートの順を逆にする

 日時順にリストするには。


ls -lt
 古い順にリストするには。

ls -lrt
 「あるディレクトリ以下の合計ファイル数を再帰的に知るunixコマンド|プログラムメモ」で読んだ記事ですが。  「grep」や「egrep」と組み合わせて、ディレクトリ配下の合計ファイル数を知るには。

ls -laR | grep -c '^-'
 ディレクトリ配下の合計ディレクトリ数を知るには。

ls -laR | egrep -c '^d.+[^.]$'

3. 秒単位で表示

 通常、「-l」オプションをつけてファイルの作成日時を表示しても。

$ ls -l
合計 844K
drwxr-xr-x  2 showkit  showkit     512  9月 17  2013 log
drwx------ 13 showkit  showkit     512 10月 24 07:40 Maildir
-rw-------  1 showkit  showkit  807634 10月 24 01:32 procmail.log
 てな感じで、年以上離れていれば、日付まで、年内でも分単位までしか表示されません。  「GNU ls」(「FreeBSD」では「gls」で実行)であれば。

ls -l --time-style=+%c
 というオプションで、秒単位まで表示させることができます。

$ ls -l --time-style=+%c
合計 844K
drwxr-xr-x  2 showkit  showkit     512 火  9/17 05:22:38 2013 log
drwx------ 13 showkit  showkit     512 月 10/24 07:40:29 2022 Maildir
-rw-------  1 showkit  showkit  807634 月 10/24 01:32:15 2022 procmail.log
 「--time-style」の先に「年月日時分秒」の形式を指定することが可能です。

$ ls -l --time-style=+'%Y-%m-%d %H:%M:%S'
合計 844K
drwxr-xr-x  2 showkit  showkit     512 2013-09-17 05:22:38 log
drwx------ 13 showkit  showkit     512 2022-10-24 07:40:29 Maildir
-rw-------  1 showkit  showkit  807634 2022-10-24 01:32:15 procmail.log

4. ワイルドカード

 普段、ワイルドカードは「*」しか、使っていなかったのですが、ふと1文字を使いたかったとき・・・。  はて?どうやるんだっけとなりました。  本項は、下記のサイトを参考にさせていただきました。
Linux【ワイルドカードと正規表現】の違いと変換,展開の動作 ~ ls, grep, findでの具体例の解説~
 ありがたい。  ほぼ、丸パクリで書きますが。
 指定  意    味  備考 
* 任意の0文字以上の文字列
? 任意の1文字
[ ] 大カッコ内のいずれかの文字 ※1
{ , } 中カッコ内の,(カンマ)で区切られた文字列のいずれか ※2

 ※1 [0-8]とハイフンを使うと0から8の間のいずれかの数字になる。
    [!dfh] とエクスクラメーションマークを使うと「d」でも「f」でも「h」でもない任意の1文字を意味する。
 ※2 {test.txt,hoge*.txt}であればtest.txt もしくは hoge(任意の文字列).txt がヒットする。

5. ファイルのみ

 「ls」で、ディレクトリのみを表示させるのは、「-d」オプションで十分ですが。  ファイルのみを表示させるのは、難しい。  「-F」オプションで、ディレクトリには「/」がつくことを利用して、「grep」と組み合わせて使用します。

ls -F [path] | grep -v /
ハイスピードプラン世界最大級のオンライン英会話EF English Live