
チームをサポートするために、毎日特定の時間にバックアップとステータスの更新を行う必要があります。これを行うには、*.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')"