Table of Contents
ls
あるディレクトリ(フォルダ)に存在するファイル・サブディレクトリの情報を表示します。ターミナルで処理を行う場合はディレクトリ内にどんなファイルがあるかを視覚的に見ることはできません。そこで、このコマンドを使って存在するファイルを確認します。
使い方
カレントディレクトリの構成が以下のようであるとします。
. ├── directory1 │ ├── directory1-1 │ ├── directory1-2 │ └── directory1-3 ├── directory2 │ ├── directory2-1 │ ├── directory2-2 │ └── directory2-3 ├── test1.txt ├── test2.txt └── test3.txt
カレントディレクトリ内の状態を調べるには、次のように入力します。(ドットは省略できます)
ls .
すると下のようにディレクトリ内のファイル名とディレクトリ名が表示されます。
結果
カレントディレクトリではなく、あるディレクトリを指定してその中身を調べたいという場合は、次のようにディレクトリのパスを書いてコマンドを実行します。
ls directory1
結果
directory1には3つのサブディレクトリがあるので、上のように表示されます。
よく使うオプション
隠しフォルダを表示する -a
ファイル名が.(ドット)から始まる隠しファイルも表示する。
ls -a
結果
詳細情報も表示する -l
ファイル名以外にもファイルの詳細情報を出力する。
ls -l
結果
total 0 drwxr-xr-x 5 Iden staff 170 8 7 17:35 directory1 drwxr-xr-x 5 Iden staff 170 8 7 17:36 directory2 -rw-r--r-- 1 Iden staff 0 8 7 17:37 test1.txt -rw-r--r-- 1 Iden staff 0 8 7 17:37 test2.txt -rw-r--r-- 1 Iden staff 0 8 7 17:37 test3.txt
詳細情報は左から順に、
- 「ファイルタイプおよびアクセス権」
- 「ディレクトリ内のディレクトリ数(./と../も含む)」
- 「所有者名」
- 「グループ名」
- 「ファイルサイズ(単位はバイトでディレクトリであれば0)」
- 「作成月」
- 「作成日」
- 「作成時間」
- 「ファイル名またはディレクトリ名」
となっています。また一番上の行の total とは、512バイトブロック単位での、ディレクトリの容量の合計です。今回の例ではファイルサイズが小さいので0となっています。
ディレクトリ名の末尾に / を付ける -f
表示された名前がファイルかディレクトリかを見分けやすくするために / をつけます。お使いのシェルの設定によっては、このオプションを使わなくても / が付けられる場合があります。
ls -F
結果
今回の例で使用しているディレクトリ構成では、元々アルファベット順なので違いがわかりませんが…
一行ずつ表示する -1
-1(数字の一)オプションを使うと、ファイル名やディレクトリ名の表示を一行に1つとします。
ls -1
結果
directory2
test1.txt
test2.txt
test3.txt
grep
あるキーワードを含んでいるファイルの名前や場所、何行目にそのキーワードが登場するかなどを調べたい時に便利なコマンドが grep です。
使い方
以下のようなファイル構造であるとします。
. ├── directory1 │ ├── directory1-1 │ │ └── test3.txt │ └── test1.txt ├── directory2 │ └── test2.txt └── test.java
また、各テキストファイルの中身が次のようになっているとします。
test.java
apples APPLE
test1.txt
apple banana
test2.txt
apple and banana lemon
test3.txt
apples bananas lemon peach
カレントディレクトリとサブディレクトリの中で apple を含んでいるファイルを調べるには、次のように入力します。
grep -r "apple" *
結果
directory1/directory1-1/test3.txt:apple directory1/test1.txt:apple directory2/test2.txt:apple and banana test.java:apples
このように、apple を含んでいるファイルの名前と、その行が表示されます。apples のように他の文字がくっついていても検索できます。
grep の基本文法は以下のようになります。
grep [オプション...] [検索キーワード] [検索対象]
検索キーワードは基本的にはクオテーションで囲います。囲わなくてもいい場合もありますが、囲っておく方が見やすく安全です。
よく使うオプション
サブディレクトリの中も検索する -r
先ほどの例のように、検索対象としているディレクトリの中に存在するディレクトリ内も検索したい場合に使うオプションです。このオプションを付けない場合、ディレクトリは検索対象とはならず、カレントディレクトリ内のファイルのみを検索します。
grep "apple" *
結果
grep: directory1: Is a directory grep: directory2: Is a directory test.java:apples
このように、「Is a directory」と表示され、ディレクトリは検索対象外となっています。
大文字・小文字を区別せずに検索する -i
通常は大文字と小文字は別の文字として認識されますが、このオプションをつけることで同じものとして検索できます。
grep -r -i "apple" *
結果
directory1/directory1-1/test3.txt:apple directory1/test1.txt:apple directory2/test2.txt:apple and banana test.java:apples test.java:APPLE
大文字の APPLE も検出できていることが確認できます。
検索キーワードを含むファイル名だけを表示する -l
もしファイル名だけ分かればで十分であれば、-l オプションを使います。
grep -r -l "apple" *
結果
directory1/directory1-1/test3.txt directory1/test1.txt directory2/test2.txt test.java
ファイル名にあるキーワードを含むファイルだけを検索対象にする –include
例えば、拡張子が .txt のファイルだけを検索対象としたい場合は次のようにします。
grep -r --include="*.txt" "apple" *
結果
directory1/directory1-1/test3.txt:apple directory1/test1.txt:apple directory2/test2.txt:apple and banana
拡張子が .txt でないファイルは除外されていることが確認できます。
find
grep がファイル内のキーワードを検索できるのに対し、find はファイル名やファイルタイプ、ファイルサイズ、更新日時などの条件を指定した検索ができます。
使い方
以下のようなファイル構造であるとします。
. ├── directory1 │ ├── directory1-1 │ │ └── test3.txt │ └── test1.txt ├── directory2 │ └── test2.txt ├── test.java ├── test4.txt └── test5.txt
次のコマンド例は、カレントディレクトリ以下に存在するファイルで、拡張子が .txt のものを検索します。find は自動的にサブディレクトリの中も検索します。
find . -name "*.txt"
結果
./directory1/directory1-1/test3.txt ./directory1/test1.txt ./directory2/test2.txt ./test4.txt ./test5.txt
find の基本文法は以下のようになります。
find [検索開始ディレクトリ] [オプション...]
よく使うオプション
ファイル名に含まれるキーワードを指定して検索 -name
上記の例のように使います。
ファイルタイプを指定して検索 -type
検索対象をファイルやディレクトリに絞りたいときに便利なオプションです。ディレクトリを検索する場合は、-type と書いた後に d を、ファイルを検索対象にする場合は f を書きます。
find . -type d
結果
. ./directory1 ./directory1/directory1-1 ./directory2
find . -type f
結果
./directory1/directory1-1/test3.txt ./directory1/test1.txt ./directory2/test2.txt ./test.java ./test4.txt ./test5.txt
ファイルサイズを指定して検索 -size
次のコマンドはファイルサイズが1KB以下のファイルを検索します。
find . -size -1k
-size と書いた後にファイルサイズを指定します。ファイルサイズの前に – をつけると、その数値以下のファイルサイズのファイルを検索します。また、使える単位は
単位 | 意味 |
---|---|
c | バイト |
k | キロバイト |
M | メガバイト |
です。大文字、小文字はこの通りでなければなりません。
ファイルサイズの前に + をつけた場合、指定したファイルサイズ以上のファイルを検索します。次の例はファイルサイズが1KB以上のファイルを検索します。
find . -size +1k
複数の条件を組み合わせる -and と -or
拡張子が .txt で、かつファイルサイズが 10KB のファイルを検索する といった場合は -and を使います。
find . -name "*.txt" -and -size 10k
名前が directory.txt のファイル、またはディレクトリを検索する という場合は -or を使います。
find . -name "directory.txt" -or -type d
diff
2つのファイルの違いを行ごとに調べたいときに便利なコマンドです。例えば、次の2つのテキストファイルの違いを調べたいとします。
test1.txt
abcdefg hijklmn opqrstu vwxyz
test2.txt
abcdefg hijkLMN vwxyz
次のようにコマンドを使います。
diff test1.txt test2.txt
結果、次のように表示されます。
結果
2,3c2,3 < hijklmn < opqrstu --- > > hijkLMN
変化のあった2,3行目が表示されています。行頭に < が書かれているのが、コマンド実行時に1つ目に指定したファイルです。区切り線の後で > が行頭に表示されているのが2つ目のファイルの中身となっています。
よく使うオプション
スペースを無視する -w
デフォルトでは、スペースの違いも文章の違いとして認識されます。スペースの違いを無視していい場合は -w をつけます。次の二つのファイルを例に動作を確認します。
test1.txt
abcdefg hijklmn opqrstu vwxyz
test2.txt
abcdefg hijklmn opqrstu vwx yz
次のようにコマンドを使います。
diff -w test1.txt test2.txt
結果
2a3 >
スペースの違いを無視すれば、3行目に空行が追加されただけに見えますので、そのように表示されます。
空行を無視する -B
空行の違うを無視したい場合は -B オプションをつけます。次のファイルを例に動作を確認します。
test1.txt
abcdefg hijklmn opqrstu vwxyz
test2.txt
abcdefg hijklmn opqrstu vwxyz
次のようにコマンドを使います。
diff -B test1.txt test2.txt
結果
何も表示されません。
test2.txt の 3行目にある空行を無視した場合、2つのファイルの違いはありません。違っているところがないため結果は何も表示されません。