はじめに
みなさま、cutコマンドは活用されますでしょうか。
指定したテキストの各行から選択した範囲を切り出して出力することができます。
サーバー運用のなかで、ファイルの一覧を表示するlsコマンド、毎日のように実行するかと思います。
lsコマンドの出力から、必要な範囲を指定して出力するということを私はよくやります。
そんな使い方を紹介します。
環境
OS : AlmaLinux 8
cutバージョン : 8.30
使い方
サンプルファイルを用意しておきました。
A~Dというディレクトリにa.txt~d.txtというファイルを作成しています。
$ ls -lR
.:
total 0
drwxr-xr-x 2 test test 19 Mar 20 22:34 A
drwxr-xr-x 2 test test 19 Mar 20 22:34 B
drwxr-xr-x 2 test test 19 Mar 20 22:34 C
drwxr-xr-x 2 test test 19 Mar 20 22:34 D
./A:
total 4
-rw-rw-r-- 1 test test 3 Mar 20 22:55 a.txt
./B:
total 4
-rw-rw-r-- 1 test test 5 Mar 20 22:55 b.txt
./C:
total 4
-rw-rw-r-- 1 test test 7 Mar 20 22:55 c.txt
./D:
total 4
-rw-rw-r-- 1 test test 9 Mar 20 22:55 d.txt
$
では、lsコマンドでファイル一覧を表示してみます。
$ ls -l */*
-rw-rw-r-- 1 test test 3 Mar 20 22:55 A/a.txt
-rw-rw-r-- 1 test test 5 Mar 20 22:55 B/b.txt
-rw-rw-r-- 1 test test 7 Mar 20 22:55 C/c.txt
-rw-rw-r-- 1 test test 9 Mar 20 22:55 D/d.txt
$
この表示内容から、ファイル名だけを出力したいと思います。
-d に区切り文字とする文字を指定します。今回は/を指定します。
-f に表示したいフィールド番号を指定します。フィル名だけ出力したいので、/で区切った2つめのフィールドを指定します。
$ ls -l */* | cut -d"/" -f2
a.txt
b.txt
c.txt
d.txt
$
ファイル名だけを出力することができましたね。
次に、ファイルサイズとファイルパスを指定して出力させたいと思います。
スペース区切りで、フィールド番号は5と9を指定します。
$ ls -l */* | cut -d" " -f5,9
3 A/a.txt
5 B/b.txt
7 C/c.txt
9 D/d.txt
$
この出力をsortコマンドに渡すことで、ファイルサイズの大きい順にならべることもできます。
$ ls -l */* | cut -d" " -f5,9 | sort -k1 -nr
9 D/d.txt
7 C/c.txt
5 B/b.txt
3 A/a.txt
$
まとめ
いかがでしたか?
cutコマンドで必要な項目だけ表示させ、その出力をさらに別のコマンドで必要な情報に加工するといったことを良くやります。
是非とも、快適なサーバー運用にご活用ください。