ディレクトリ内の最新の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)がフィールド区切り文字として使用されるためです。\t
sort
cut
\t
POSIXに準拠するには、次のものを置き換えることができます。
$'...\t...'
そして
"...<press Ctrl-V, Tab>..."
残念ながらstat
ポータブルではありません。 Linuxでは使用されますが、stat -c "%Y"
FreeBSDおよびMac OSでも使用されますstat -f "%m"
。
移植可能なアプローチが本当に必要な場合は、Python、Perl、またはRubyを使用する方が簡単です。