最後に作成/変更されたファイルの最後の5行を表示するには?

最後に作成/変更されたファイルの最後の5行を表示するには?

チームをサポートするために、毎日特定の時間にバックアップとステータスの更新を行う必要があります。これを行うには、*.affディレクトリで最後に作成/変更されたファイルの最後の5行を確認して更新する必要があります。

Linuxの*.affファイルなど、最後に変更されたファイル(特定の拡張子を使用)の最後の5行を表示する方法を教えてください。*.logなどの他のファイルも作成します。

答え1

シェルを含むzsh:

tail -n 5 ./*.aff(D.om[1])

他のシェルでは、ファイル名に含まれる可能性があるものを想定したくない場合は、信頼できるものを見つけることは困難です。

たとえば、bash最新のGNUシステムを使用している場合、そのシステムは次のようになります。

find . -maxdepth 1 -name '*.aff' -type f -printf '%T@:%p\0' |
  sort -rzn |
  sed -zn 's/[^:]*://p;q' |
  xargs -r0 tail -n 5

または:

find . -maxdepth 1 -name '*.aff' -type f -printf '%T@/%p\0' |
  sort -rzn | (IFS=/ read -rd '' mtime file && tail -n 5 "$file")

答え2

ファイル名に改行文字が含まれておらず、すべての*.affファイルが通常のファイルであるとします。

ls -t1d -- *.aff | head -n 1

最後に変更されたファイルの名前を提供します.aff。最後の5行が必要な場合は、次のようにします。

tail -n 5 -- "$(ls -t1d -- *.aff | head -n 1)"

答え3

すべてのGNUシステムとBusyboxで動作するもう1つの安全な方法は次のとおりです。

tail -n5 "$(stat -c "%Y %n" ./* | 
    sort -nk1,1 | cut -d ' ' -f 2- | tail -n1)"

これはほとんどの場合に機能しますが、ファイル名に改行文字を含めることができる場合は、以下を使用します(GNUのみ、ファイルが改行文字で終わっても中断されます)。

tail -n5 "$(stat --printf "%Y %n\0" ./* | 
    sort -rznk1,1 | sed -zn 's/[0-9]\+ //p;q')"

関連情報