ディレクトリ内の最後に変更された5つのファイルをリスト(ls)するにはどうすればよいですか?


138

私はls -t修正された時間ですべてのファイルをリストすることを知っています。しかし、これらの結果を最後のn個のファイルのみに制限するにはどうすればよいですか?


10
順序を逆にすることls -lrtは誰かを助けるかもしれません。
PJ Brunet

@PJBrunet大好きです。tharl必要なものがすべて揃う傾向があるので、常にlsを使用する習慣をつけてきました。
アダムグラント

回答:


246

頭や尾を使ってみてください。最近変更された5つのファイルが必要な場合:

ls -1t | head -5

-1(つまり1)は1行に1つのファイルを示し、ヘッドは最初の5つのエントリを取得することを示します。

もし最後の5回が欲しいなら

ls -1t | tail -5

2
私が間違っていない場合、シェルはの出力をls複数の列で表しますが、の出力はls一度に1つのファイル/ディレクトリで次のコマンドにパイプされます
Alex

それはそうです。素敵な簡素化。
Paul Rubel 2013年

3
これは、上部の合計を無視します:ls -1t | head -n 6 | tail -n 5
ライアン・

1
合計は表示されませんが、確かに機能するものがあれば表示されます。
Paul Rubel 2013年

18

受け入れられた回答にはファイル名のみがリストされていますが、上位5つのファイルを取得するには、次のコマンドも使用できます。

ls -lht | head -6

どこ:

-l リスト形式で出力

-h 出力を人間が読めるようにします(つまり、ファイルサイズはkb、mbなどで表示されます)

-t 最後に変更されたファイルを最初に配置して出力をソートします

head -6ls出力の最初の行にブロックサイズを出力するため、5つのファイルが表示されます。

これはもう少しエレガントで、おそらくもっと便利なアプローチだと思います。

出力例:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv


12

tailコマンドを使用:

ls -t | tail -n 5

これは最も古い5を与えます。最新の5を取得ls -trするにheadは、並べ替え()を逆にするか、ではなくを使用する必要がありtailます。
ヘッドバンク

2

デフォルトでは、ls -t出力を最新のものから最も古いものに並べ替えます。そのため、使用するコマンドの組み合わせは、出力を並べる方向に依存します。

最新のものから古いものの順に並べられた最新の5つのファイルについてはhead、出力の最初の5行を取得するために使用します。

ls -t | head -n 5

最も古いものから新しいものへと並べられた最新の5つのファイルについては、-rスイッチを使用してlsのソート順を逆にし、を使用tailして出力の最後の5行を取得します。

ls -tr | tail -n 5

1

ls -t最終変更時刻ではなく、作成時刻でファイルをリストします。ls -ltc最後から最後まで(最後から最後まで)の最終変更時刻でファイルを一覧表示する場合に使用します。したがって、最後のnをリストするには:ls -ltc | head ${n}


1
どのプラットフォーム/バージョンを参照していますか?リンクを提供してもらえますか?見るとLinuxのmanページは、あなたが述べる何の反対が得られます -t sort by modification time, newest first
JOMA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.