質問: サブディレクトリと時間を含むディレクトリ内で最新の変更ファイルを再帰的に検索して一覧表示する方法 オペレーティングシステム:linux ファイルシステムの種類:ext3 推奨される解決策:bash(script/oneliner)、ruby、python いくつかのサブディレクトリとファイルを含むいくつかのディレクトリがあります。すべての第1レベルのディレクトリがその中の最新の作成/変更されたファイルの日時の隣にリストされるような方法で構築されたこれらすべてのディレクトリのリストを作る必要があります。わかりやすくするために、ファイルに触れたり、その内容をサブディレクトリの数レベル下まで変更したりすると、そのタイムスタンプは最初のレベルのディレクトリ名の横に表示されるはずです。このような構造のディレクトリがあるとします。./alfa/beta/gamma/example.txt そして私はファイルexample.txtの内容を修正します、その時はepochではなく、人間が読める形式で第一レベルディレクトリalfaの隣に表示される必要があります。 find、xargs、sortなどを使用していくつかのことを試してみましたが、ファイルを2、3レベル下げてもファイルシステムのタイムスタンプが変わらないという問題を回避することはできません。
回答: このコマンドはmac os xで機能します:find "$1" -type f -print0 | xargs -0 stat --format '%y :%y %n' | sort -nr | cut -d: -f2- | headlinuxでは、元のポスターが尋ねたように、statの代わりにgstatを使用します。もちろん、この回答は ser37078 の優れたソリューションであり、コメントから完全な回答に昇格されています。 mac os xでgstatを使用するために charlesb の洞察を混ぜました。 macports からcoreutilsを取得しました homebrew ではなく、ところで。そして、再利用のためにこれを簡単なコマンド~/bin/ls-recent.shにパッケージ化した方法は次のとおりです。#!/bin/bash # ls-recent: list files in a dir tree, most recently modified first # # usage: ls-recent path [-10 | more] # # where "path" is a path to target directory, "-10" is any arg to pass # to "head" to limit the number of entries, and "more" is a special arg # in place of "-10" which calls the pager "more" instead of "head". if [ "more" = "$2" ]; then h=more; n='' else h=head; n=$2 fi find "$1" -type f -print0 |xargs -0 gstat --format '%y :%y %n' \ |sort -nr |cut -d: -f2- |$h $n