web-dev-qa-db-ja.com

ディレクトリツリー内の最新の500ファイルのコマンドを検索し、POSIXに準拠する

ディレクトリ内の最新の500ファイルを見つけるための1行のシェルスクリプトまたはunixコマンドを探しています。主な制約は、POSIXの苦情であり、ディレクトリに大量のファイルが含まれる可能性があることです。

2
Sandeep

500個の最新ファイルを判別するために、ディレクトリ内のすべてのファイルを統計する必要があると確信しています。

ls -t| head -n 500

2
200_success

ディレクトリとそのすべてのサブディレクトリ内のファイルを意味する場合は、次のようになります。

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は、sortcutがフィールド区切り文字として\t(つまり、TAB)を使用するためです。

POSIXに準拠するために、置き換えることができます

$'...\t...'

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

残念ながら、statは移植性がありません。 Linuxはstat -c "%Y"を使用しますが、FreeBSDとMacOSはstat -f "%m"を使用します。

本当にポータブルなメソッドが必要な場合は、Python、Perl、またはRubyを使用する方が簡単です。

0
Mikel