サイトロゴ

ls・tree・sort・uniq コマンドの使い方

著者画像
Toshihiko Arai

ls 基本オプション

オプション 説明
-a 隠しファイルを含めた全てのファイルとディレクトリを表示します。
-l 詳細情報を表示します(ファイルの種類、パーミッション、リンク数、所有者、グループ、サイズ、タイムスタンプ)。
-h ファイルサイズを人が読みやすい形式(例:KB、MB)で表示します(-l オプションと一緒に使います)。
-r ファイルを逆順に表示します。
-t ファイルを変更時間でソートして表示します。
-S ファイルサイズでソートして表示します。
-G macOSでファイルの種類ごとに色分けして表示します

ls 実践

これらのオプションは組み合わせて使用することができます。例えば、すべてのファイルを詳細表示し、ファイルサイズを人が読みやすい形式で表示するには、以下のようにコマンドを実行します。

ls -lah

別の例として、すべてのファイルをファイルサイズの大きい順に詳細表示するには、以下のようにします。

ls -lhaS

## ls 便利なオプション ls コマンドのその他の便利なオプションについても追加説明します。

オプション 説明
-F 各ファイルの後ろに、ファイルの種類を示す文字(/ = ディレクトリ、* = 実行可能ファイルなど)を追加して表示します。
-d ディレクトリ自体を表示し、内容を表示しない。
--group-directories-first ディレクトリを先に表示し、その後にファイルを表示します(GNU lsにはあるが、macOSにはない)。
-i 各ファイルのinode番号を表示します。
-o -lに似ていますが、グループ情報を省略します。
-1 各ファイルやディレクトリを1行に1つずつ表示します。

これらのオプションも組み合わせて使うことができます。例えば、ファイルとディレクトリを種類に応じて識別しやすくするために、-F オプションを使います。

ls -lF

さらに、-G オプション(macOSにはない場合がある)は、詳細表示からグループ情報を省略したい場合に便利です。macOSでは -o オプションが似たような目的で使えます。

ls -lo

これらは ls コマンドの多くのオプションの一部です。特定のニーズに応じて、これらのオプションを組み合わせて使用することができます。さらに詳細な情報や、ここに記載されていないオプションを探す場合は、ターミナルで man ls を実行してマニュアルページを参照してください。

ls & grep

ls コマンドは、他のコマンドと組み合わせて使用することで、さらに強力な操作が可能になります。以下は、ls コマンドを他のコマンドと組み合わせた便利な例です。

ファイルやディレクトリのリストから特定のパターンにマッチするものだけを抽出したい場合、ls コマンドの出力を grep コマンドにパイプで渡します。

ls -l | grep '^d'

このコマンドは、現在のディレクトリ内のすべてのディレクトリ(-l オプションで詳細表示されたリストの中で、行の先頭が d で始まるもの)をリストアップします。

ファイルのみ表示させる場合は、次のようにします。

ls -l | grep '^-'

ls & sort

ファイルのリストを特定の基準でソートしたい場合は、ls コマンドの出力を sort コマンドにパイプで渡します。

ls -l | sort -k 5 -n

このコマンドは、ファイルサイズ(第5フィールド)に基づいて、ファイルのリストを数値的にソートします。

ls & wc

ディレクトリ内のファイルやサブディレクトリの総数を知りたい場合は、ls コマンドの出力を wc コマンドにパイプで渡して、行数をカウントします。

ls -1 | wc -l

このコマンドは、現在のディレクトリ内のファイルとサブディレクトリの総数を表示します。

ls & (head or tail)

ディレクトリ内のファイルリストの先頭や末尾の数ファイルだけを表示したい場合に便利です。

  • 最初の5ファイルを表示:
ls -l | head -n 5
  • 最後の5ファイルを表示:
ls -l | tail -n 5

ls & xargs

特定のファイルに対してバッチ操作を行いたい場合に、lsxargs を組み合わせます。

  • .txt ファイルをすべて削除:
ls *.txt | xargs trash

これらの例は、ls コマンドをより強力に使うための一部です。これらのコマンドを組み合わせることで、さまざまなタスクを効率的に実行することができます。この例では安全のためtrashを使っています。削除操作でrm コマンドを行う場合は、操作の影響をよく理解してから実行してください。

treeコマンド

tree コマンドで、現在のディレクトリ配下をツリー表示してくれます。

treeのインストール

brew install tree
$ tree
.
├── composer.json
├── composer.lock
└── vendor
    ├── autoload.php
    ├── composer
    │   ├── ClassLoader.php
    │   ├── InstalledVersions.php
    │   ├── LICENSE
    │   ├── autoload_classmap.php
    │   ├── autoload_files.php
    │   ├── autoload_namespaces.php
    │   ├── autoload_psr4.php
    │   ├── autoload_real.php
    │   ├── autoload_static.php
    │   ├── installed.json
    │   ├── installed.php
    │   └── platform_check.php
    ├── guzzlehttp
    │   ├── guzzle
    ...

ただし、ディテクトり構造が大規模な場合はすべて表示されるため、オプションでフィルターをかけると便利です。

treeでよく使うオプションまとめ

オプション 意味 コマンド例
-d ディレクトリのみ表示 $ tree -d
-L level 階層の深さを指定 $ tree -L 2
-I pattern パターンにマッチするものを除外 $ tree -I 'build\|src'
–gitignore .gitignore でフィルタリング $ tree --gitignore

gitで管理している大規模プロジェクトなどでは、--gitignoreを使うとすごく便利です。もちろん .gitignore が存在することが前提です。

$ tree --gitignore

とくにbuildディレクトリなど弾いてくれると、ツリー構造がとても見やすくなります。

sortの基本オプション

sortコマンドは、テキストファイルの内容を行単位で並び替えるために使用されます。標準入力からのデータや、指定したファイルの内容をソートすることができます。ここでは、sortコマンドの主なオプションと使用例を紹介します。

内容 実行コマンド
ファイル内容のソート sort ファイル名
複数ファイルの内容を結合してソート sort ファイル名1 ファイル名2
オプション 説明
-n 数値としてソートします。デフォルトでは文字列としてソートされます。
-r 逆順でソートします(降順)。
-k キーとして指定したフィールド(列)のみでソートします。例えば、-k 2なら2列目のデータを基準にソートします。
-t フィールドの区切り文字を指定します。デフォルトはスペースです。
-u 重複を削除してユニークな行のみを出力します。
-o 出力先ファイルを指定します。
-f 大文字と小文字を区別せずにソートします。
-c ソートされているかをチェックし、ソートされていない場合は最初の箇所を報告します。
-m 既にソートされている複数のファイルをマージします。

sort 実践

数値順にソートする:

sort -n ファイル名

逆順でソートする:

sort -r ファイル名

2列目を数値としてソートする:

sort -k 2 -n ファイル名

カンマ区切りのファイルで、2列目を基準にソートする:

sort -t, -k2 -n ファイル名

次のサンプルデータを用意しました。このデータには、果物の名前と数量がカンマ区切りで記載されています。

りんご,100
ばなな,20
ぶどう,300
みかん,50

sortコマンドでこのデータの並び順を操作してみます。次はort -t, -k2 -n fruit_data.txtの実行結果です:

なな,20
みかん,50
りんご,100
いちご,200
ぶどう,300
あんず,500

重複を削除する

sort ファイル名 | uniq(またはsort -u ファイル名

sortコマンドは、ログファイルの分析、データの前処理、または単純にファイル内の行を整理する際に非常に便利です。複数のオプションを組み合わせることで、さまざまなソート条件を指定できます。

sort -k オプション詳細

sort -t, -k2,2nr の中の ,2 の部分について、 -k2nr で良いのでは?」 と思いますよね。

-k オプションの構文詳細:

-k <start>[,<end>]
  • start:ソートキーの開始フィールド
  • end(省略可):ソートキーの終了フィールド
    • 同じ値を指定すれば、その1列だけがキーになる

-k2nr-k2,2nr の違いは?:

記法 意味
-k2nr フィールド2以降すべてを使ってソート。ただし普通は先頭のフィールドで決まるので実質問題なし。
-k2,2nr フィールド2 だけ をキーとして、数値で降順にソート

uniq 基本オプション

uniqコマンドは、テキストファイル内の連続する重複行をフィルタリングするために使用されます。重複行は、直前の行と完全に同じである場合にのみ検出されるため、一般的にuniqコマンドはsortコマンドと組み合わせて使用されます。

オプション 説明
-c 各行が現れた回数を表示します。
-d 重複している行のみを表示します。
-u 重複していない行のみを表示します。
-i 大文字と小文字の違いを無視して比較します。
-z 入力と出力の行終端をNULL文字で扱います。
--count -cオプションと同様に、各行が現れた回数を表示します。
--repeated -dオプションと同様に、重複している行のみを表示します。
--unique -uオプションと同様に、重複していない行のみを表示します。
--ignore-case -iオプションと同様に、大文字と小文字の違いを無視して比較します。
--zero-terminated -zオプションと同様に、入力と出力の行終端をNULL文字で扱います。

uniq 実践

uniq処理の前にかならずsortコマンドで順番を整形してください。そうしないと重複削除がうまく機能しません。

重複行の数をカウントする:

sort ファイル名 | uniq -c

重複している行のみを表示する:

sort ファイル名 | uniq -d

重複していない行のみを表示する:

sort ファイル名 | uniq -u

大文字と小文字を無視して重複行をフィルタリングする:

sort ファイル名 | uniq -i

uniqコマンドはテキストの前処理やデータ分析など、さまざまなシナリオで有用です。特に、ログファイルやデータセットから重複を除外したり、特定のパターンがどれだけ頻繁に現れるかを確認したりする際に役立ちます。

cutコマンドの主なオプション

cut コマンドは、テキストファイルやコマンド出力の各行から選択した部分を切り出して表示するためのコマンドです。主にテキストデータの列(フィールド)を扱うのに便利です。macOSやLinuxなどのUnix系OSで使用できます。

オプション 説明
-b (バイト単位での選択): 指定したバイト位置のデータを切り出します。
-c (文字単位での選択): 指定した文字位置のデータを切り出します。
-f (フィールド単位での選択): デリミタ(区切り文字)に基づいて列を指定して切り出します。
-d (デリミタの指定): フィールドのデリミタ(区切り文字)を指定します。デフォルトはタブです。
--output-delimiter (出力デリミタの指定): 出力時のフィールド区切り文字を指定します。

cutコマンド 実践

テキストファイルから1-5文字目を切り出す:

cut -c1-5 ファイル名

CSVファイルから2列目をカンマで区切って抽出する:

cut -d',' -f2 ファイル名

複数のフィールド(例えば、1列目と3列目)を抽出する:

cut -d',' -f1,3 ファイル名

範囲指定でフィールドを抽出する(例えば、2列目から4列目):

cut -d',' -f2-4 ファイル名

cut コマンドはテキスト処理の際に非常に役立ちます。列に基づいたシンプルなデータの抽出に便利で、シェルスクリプトやデータ分析の初歩的な段階で頻繁に利用されます。

関連記事