ディレクトリ内のすべてのリーフファイルを時系列順にリストする方法は?

ディレクトリ内のすべてのリーフファイルを時系列順にリストする方法は?

ディレクトリが与えられたら、すべてのリーフファイルを時間の逆順でどのようにリストしますか?ls -Rltrサブディレクトリの内容を時系列順に並べ替えることですが、ファイルを子ディレクトリごとにグループ化するため、親ディレクトリに関係なくすべてのリーフファイルを時系列順にリストする必要があるという要件が壊れます。ありがとうございます。

答え1

そしてzsh

printf '%s\n' **/*(D^om/:t)

zshこれは現在ユニークな機能であるグローバル修飾子です。

  • D:ドットファイルを含みます。
  • ^:次の修飾子を反転します。
  • om:時系列修正(反対^
  • /^:その種類のファイルを除外(使用)します。目次
  • :t:獲得できる修飾語ファイル名(デフォルト名)。

(デフォルト名だけでなくフルパスが必要な場合は削除してください:t。)

bash以下を提供するすべてのシェルで利用可能zsh

zsh -c 'printf "%s\n" **/*(D^om/:t)'

またはGNUシステムでは:

find . ! -type d -printf '%T@\t%f\0' | sort -zn |
  tr '\n\0' '\0\n' | cut -f2- | tr '\0' '\n'

(デフォルト名だけでなく、フルパスを必要に応じて or%fに変更します(ここと同じ))。%P%p./%P

関連情報