ディレクトリ内の最新の500ファイルを見つけるための1行のシェルスクリプトまたはunixコマンドを探しています。主な制約は、POSIXの苦情であり、ディレクトリに大量のファイルが含まれる可能性があることです。
500個の最新ファイルを判別するために、ディレクトリ内のすべてのファイルを統計する必要があると確信しています。
ls -t
| head -n 500
ディレクトリとそのすべてのサブディレクトリ内のファイルを意味する場合は、次のようになります。
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行を印刷します$'...'
と\t
は、sort
とcut
がフィールド区切り文字として\t
(つまり、TAB)を使用するためです。
POSIXに準拠するために、置き換えることができます
$'...\t...'
と
"...<press Ctrl-V, Tab>..."
残念ながら、stat
は移植性がありません。 Linuxはstat -c "%Y"
を使用しますが、FreeBSDとMacOSはstat -f "%m"
を使用します。
本当にポータブルなメソッドが必要な場合は、Python、Perl、またはRubyを使用する方が簡単です。