まとめも

大事だと思ったこと、困ったところのメモ

lsコマンド の結果をパイプに渡して必要な行だけ抜き出す

lsコマンドって

ls は現在作業しているディレクトリに存在するファイルやディレクトリを表示するコマンドです。 しかし、ファイルやディレクトリの数が膨大になると見たいファイルやディレクトリを見つけるのが困難となります。

パイプとは

通常は標準入力(主にキーボードの入力)からデータを受け取りますが、その入力に他のコマンドの実行結果を渡すことができる仕組みのことです。

どうするの?

root@ubuntu:/var/log/apache2# ls -1
access.log
access.log.1
access.log.10.gz
access.log.11.gz
access.log.2.gz
access.log.3.gz
access.log.4.gz
access.log.5.gz
access.log.6.gz
access.log.7.gz
access.log.8.gz
access.log.9.gz
error.log
error.log.1
error.log.10.gz
error.log.11.gz
error.log.12.gz
error.log.13.gz
error.log.2.gz
error.log.3.gz
error.log.4.gz
error.log.5.gz
error.log.6.gz
error.log.7.gz
error.log.8.gz
error.log.9.gz

ここから10行目を抜き出したいとします。

ls -1 | head -10 | tail -1

を実行すると

root@ubuntu:/var/log/apache2# ls -1 | head -10 | tail -1
access.log.7.gz

と表示され、10行目だけが抜き出されていることがわかります。 head コマンドは先頭から10行表示するコマンド、head コマンドは先頭から10行表示するコマンドで、 共に-2 のように ハイフン数字 で出力する行数を指定することができます。

これらを、パイプで結ぶことで、見たい行まで抜き出しておいて、最後の行だけ表示するという処理をしています。つまり、headのオプションの数字に見たい行数の数字を指定すればいいわけですね。

応用例

ls -t を実行すると、新しい順に表示されます。

ls -1t | head -5 | tail -1 を実行すると、5番目に新しいファイルまたはディレクトリが表示されます。 ls コマンドの -r は、出力を逆にするオプションなので、ls -1tr | head -5 | tail -1 を実行すると、5番目に古いファイルまたはディレクトリが表示されます。