次のエイリアスをどのように改善できますか?

次のエイリアスをどのように改善できますか?

ログディレクトリにある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コマンドラインにファイル名を渡します。

関連情報