ログディレクトリにあるless -F
バイナリの最新の更新ログファイル(名前が次に始まるログを生成する)に対してコマンドを実行したいと思います。xtest*
次のエイリアスを作成できましたが、csh
これを改善できると思います。
find $LOG/tr/`date +"%Y%m%d"` -name xtest\* -print | xargs ls -rt | tail -1 | xargs less -F
答え1
cshellで作業しているので、エイリアスは1行にのみ定義する必要があることを知っています。したがって、表示されるエイリアスは通常の行の長さを超えています。これはあなたのためのcshellです。
alias latest_log 'find "$LOG/tr/`date +%Y%m%d`" -name "xtest*" -printf "%Ts\t%p\0" | sort -z -k 1,1nr -k 2 | head -z -n 1 | cut -z -f2 | xargs -0 less -F'
何をしているのかを示すために彫刻に分けます。
find
このコマンドは、数値タイムスタンプとファイル名とともに、NULLで区切られたファイル名を印刷します。コマンドの引用符は、引用符なしでうまく実行できるdate
ため、削除され、date
エイリアスで不必要に引用符を使用します。- その後、null(
\0
)で区切られた二重グループ(タイムスタンプTABファイル名)は、最初のフィールドから始まり、2番目のフィールドで終わる逆順に数字でソートされます。コマンド-z
のオプションは、デフォルトのsort
改行文字の代わりにNULL文字の周りから入力ブロックを分離することです。 - 正しい順序でソートされたら、コマンドは最新のタイムスタンプを持つファイル名を保持する最上位ブロックを取り出します
head -z -n 1
。 - その後、タスクは完了してもはや必要なくなり、コマンド
cut
はタイムスタンプを引き継ぎ削除します。この-z
オプションを使用して、nullで区切られた入力を処理しますcut
。このオプションは次のパイプに-f2
投げる必要があります。filename + \0
xargs -0
ヌルで区切られたファイル名を読み取り、less -F
コマンドラインにファイル名を渡します。