数万のファイルを含むディレクトリがあります。最近変更されたファイル(最後の日に変更されたファイルなど)を一覧表示したいと思います。
次のコマンドは機能しますが、ls
フォルダ内のすべてのファイルに影響を与えるため、遅くなります。
ls -rt | tail -n 10
次のコマンドは高速ですが、出力はそれほど詳細ではありませんls
。
find -mtime -1
ls
最近変更されたファイル(設定番号または日付別)を同様の出力にすばやく一覧表示する方法はありますか?
ベストアンサー1
少なくともGNUとFreeBSDには、次のような出力を生成するfind
thisがあります。-ls
ls
$ find . -ls
392815 4 drwxr-xr-x 2 user group 4096 Jul 22 18:39 .
392816 0 -rw-r--r-- 1 user group 0 Jul 22 18:39 ./foo.txt
392818 0 -rw-r--r-- 1 user group 0 Jul 22 18:39 ./bar.txt
GNU findはまた、操作の形で非常に設定可能な出力を提供します-printf
。
言い換えれば、何があなたをls
そんなに遅くするのか疑問に思います。どちらもディレクトリ全体を読み、すべてのファイルを呼び出してfind
日付を見つける必要があるため、大きな違いはありません。ファイル全体のリストを並べ替える必要があるため、ファイル数が多すぎると影響があります。この場合、ファイルを別のディレクトリに分散することを検討することができます(おそらくファイルの日付に基づいて)。削除して使用しないことが役に立ちます。ls
lstat()
ls
-r
head
tail