web-dev-qa-db-ja.com

ディレクトリ(およびサブディレクトリ)内のすべてのファイル(フルパス)をリストし、アクセス時間順に並べる

Linuxコマンドを作成して、特定のディレクトリ(およびサブディレクトリ)内のすべてのファイル(およびそれらのフルパス)をアクセス時間順にリストしたいと思います。

lsはアクセス時間順に並べることができますが、完全なパスは提供しません。 findは完全なパスを提供しますが、アクセス時間を制御できるのは、-atime N(少なくとも24 * N時間前にアクセス)で範囲を指定することだけです。これは私が望んでいることではありません。

アクセス時間で注文し、一度にフルパスを取得する方法はありますか?スクリプトを書くことはできましたが、標準のLinuxプログラムでこれを行う方法があるはずです。

21
Andrew
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7

これにより、すべてのファイルが検索され、日付と時間でソートされます。その後、awkまたはcutを使用して、ls -l出力から日付とファイル名を抽出できます。

20
Alex

あなたが試すことができます:

 ls -l $(find /foo/bar -type f )
  • 目的を達成するために、lsコマンドに他のオプション(ソート用の-tなど)を追加できます。
  • また、検索条件をfind cmdに追加できます
11
Kent

find . -type f | xargs ls -ldtは、引数の制限などのコマンドを実行してlsの2つのインスタンスを生成するほど多くのファイルがない限り、このトリックを実行する必要があります。

3
Daenyth
pwd | xargs -I % find % -type f
2
ericj
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7

Alexの答えは私にとってはうまくいきませんでした。なぜなら、1年以上前のファイルがあり、並べ替えがめちゃくちゃになったからです。上記は、日付/時刻の値を無効にし、それらが何歳であってもソート可能にする--full-timeパラメーターを追加します。

1
Ron