最新のファイルを探す

最新のファイルを探す

特定のディレクトリで最近アクセスしたファイルを見つける方法は?

このコマンドを使用すると、過去数分間に変更/アクセスされたすべてのファイルを一覧find表示できます。nしかし、私の場合、最後のファイルがいつ修正/アクセスされたのかわかりません。私にとって必要なのは、他のすべてのサブファイルまたはサブディレクトリにある最近アクセス/変更されたすべてのファイルを一覧表示することです。

それは可能ですか?

ベストアンサー1

最後にアクセスした3つのファイルを印刷するには(最後にアクセスしたファイルから3番目から最後にアクセスしたファイルまで順に):

find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'

最後に変更された3つのファイルを印刷するには(最後に変更されたファイルから3番目から最後に変更されたファイルまで順に):

find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
  • find . -type f -exec stat -c '%X %n' {} \;:現在のディレクトリ階層内の各ファイルの最後のアクセス時間とファイルパスを印刷します。
  • find . -type f -exec stat -c '%Y %n' {} \;:現在のディレクトリ階層にある各ファイルの最終変更時刻とファイルパスを印刷します。
  • sort -nr:数値を逆順に並べ替えます。
  • cut -d' ' -f2-:2番目のフィールドからスペースで区切られたすべてのフィールドを印刷します。
  • awk 'NR==1,NR==3 {print}':#1〜3の範囲の行を印刷します。

3を希望のファイル数に変更して、表示するファイル数を変更できますawk 'NR==1,NR==3 {print}'

この回答はGNUバージョンに基づいているため、BSDベースのシステムのユーザーは関連するタイムスタンプを印刷できるようにコマンドのフォーマット文字列をstat変更する必要があります。stat

~ % touch file\ 1
~ % touch file\ 2
~ % touch file\ 3
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % cat file\ 1
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 1
./file 3
./file 2
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % touch file\ 2
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 1
./file 3
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 3
./file 1

おすすめ記事