最終編集日でファイルをリストする


104

ディレクトリがあります: /home/user/

このディレクトリ内のすべてのファイル(サブディレクトリ内のファイルを含む)を一覧表示し、最後に変更された日付順に並べ替えるにはどうすればよいですか?

回答:


172

以下を使用できます。

ls -Rt

where -R再帰的な(サブディレクトリを含む)ことを-t意味し、「最終更新日でソートする」ことを意味します。


変更日でソートされたファイルのリストを表示するには、次を使用します。

ls -l -Rt

これを実現するためにエイリアスを作成することもできます。

alias lt='ls -lht'
lt

where -hはより読みやすい出力を提供します。


16
ありがとう、それは完璧です。ここにも-lを追加して、実際に日付を確認できるようにしました。後でこれを検索する人は、$ ls -lRt
Marty

4
プロンプトでこれを行っていて、最後に変更されたファイルを表示したい場合は、を検討してくださいls -lrt[RhA]。は-r並べ替え順序を逆にして、最近編集したものをリストの一番下に残します...
dmckee ---元モデレーターの子猫

これにより、-ila必要な情報のほとんどすべてが得られます。$ ls -ilaRt
ファルケンファイター2013

ll -Rt最後に修正された日付でファイルを確認する必要があったため、使用は私にとって完璧なソリューションだったので、この回答を拡張しました。これは他の人に役立つかもしれません。
Mus

@MusTheDataGuy llisは存在せず、コマンドでもありません。ほとんどはbashシェルのエイリアスですが、most / some /?で定義されていません。Linuxディストリビューション。alias ll='ls -l'/etc/bash.bashrcまたは/etc/.bashrcでそれを定義する人もいます。したがって、機能せず、OPシステムに存在しない可能性があります。ls -l -Rt少なくとも、lsposixで定義されている標準コマンドと同様に使用してください。または、あなたが意味したことを指定しますalias ll='ls -l'; ll -Rt
KamilCuk 2018年

73

すべてのファイルが変更日で一緒にソートされ、それらが存在するディレクトリを示しているが、ディレクトリごとにグループ化されてないマスターリストが必要な場合は、次のように使用できます。

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

結果は次のようになりls -lます。

-rw-r--r-- 1ルートルート3892 2009年8月11日11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r--r-- 1ルートルート22946 08/13/2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r--r-- 1ルートルート728 08/17/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r--r-- 1ルートルート873 08/18/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r--r-- 1ルートルート2552 08/19/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r--r-- 1ルートルート9546 2009年8月19日02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r--r-- 1ルートルート2201 08/19/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r--r-- 1ルートルート926 08/19/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r--r-- 1ルートルート18052 2009年8月19日04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r--r-- 1ルートルート1845 08/19/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Mac OS Xを使用している場合、オプション-printf はBSD findでは使用できません(このエラーが発生します:)find: -printf: unknown primary or operator。さいわい、HomebrewからGNU findをインストールできます(FinkMacportsにもオプションがあるはずです)。

brew install findutils

インストール後、GNU findはとして利用できるはずですgfind。したがって、必要なのは上の行を次のように変更することだけです。

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

3
良いですね。ls -Rを使用したディレクトリのグループ化全体は煩わしいものです。
El Yobo

1
素晴らしいコード、それはスクリプトを約取りました。5秒で、13,000枚の写真をさまざまなフォルダーに並べて印刷できます(非常に遅いコンピューターでCygwinを使用)。
Magnus

ああ、それは素晴らしいです。find著者ほど詳しくない人(私のような)にとって、への引数-printfman findprintfそのページの5番目のインスタンスを検索して)にあるフォーマットディレクティブです。
オーウェン・ブラッカー2013

4
MacOSでこれを使用したいが、findutilsのインストールに煩わされたくない人のために:find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' '組み込みユーティリティのみを使用してMacOSでほぼ同じ出力を提供します
Jaymon

sort -r並べ替えを逆にし、最後に変更されたファイルを上に表示します。
maryisdead

0

MAC OSX 2019

それが作成された時間は気にしないが、リストをソートしたい場合は、このコマンドを使用します

==> ls -t

注文して日付とユーザー情報を表示するには、次のコマンドを使用します

===> ls -lt


0

以下のためzshのユーザー、あなたはまた、使用することができグロブ修飾子を(も上の文書化man zshexpn):

echo *(om)

どこoの略で、ソート順アップmの略最終更新時刻

これは、forループまたは別のコマンドで使用すると便利です。

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

または、別のグロブ修飾子と連鎖します:

last_modified_file=(*(om[1]))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.