ディレクトリツリーで最新の500ファイルを検索するためのコマンドであり、POSIXと互換性があります。

ディレクトリツリーで最新の500ファイルを検索するためのコマンドであり、POSIXと互換性があります。

ディレクトリ内の最新の500ファイルを見つけるために、1行のシェルスクリプトまたはUnixコマンドを探しています。主な制限は、POSIXと互換性がなければならず、ディレクトリに多数のファイルを含めることができることです。

答え1

最新の500ファイルが何であるかを確認するには、ディレクトリ内のすべてのファイルを計算する必要があると確信しています。

ls -t| head -n 500

答え2

ディレクトリとすべてのサブディレクトリにあるファイルを参照する場合(例:

find . -exec sh -c \
    $'echo "$(stat -c "%Y" "$0")\t$0"' {} \; | \
    sort -k1nr | cut -f 2 | head -n 500

これで問題が解決します。

それを破壊する:

  • find . -exec現在のディレクトリの各ファイルに対してコマンドを実行する
  • sh -c "command" {}command表示された各ファイルに対して実行しfind$0ファイル名に設定
  • stat -c "+%Y" "$0"指定されたファイルの修正時間を印刷します。"$0"
  • sort -k1nr番号の逆順で最初のフィールドに基づいてソート
  • cut -f 2修正時間フィールドを削除し、ファイル名のみを残します。
  • head -n 500最初の500行まで印刷

$'...'これは、and(つまりTAB)がフィールド区切り文字として使用されるためです。\tsortcut\t

POSIXに準拠するには、次のものを置き換えることができます。

$'...\t...'

そして

"...<press Ctrl-V, Tab>..."

残念ながらstatポータブルではありません。 Linuxでは使用されますが、stat -c "%Y"FreeBSDおよびMac OSでも使用されますstat -f "%m"

移植可能なアプローチが本当に必要な場合は、Python、Perl、またはRubyを使用する方が簡単です。

関連情報