誰かがこのunix grepとawkステートメントを分析できますか?

誰かがこのunix grepとawkステートメントを分析できますか?

誰かがこの言葉を解釈できますか?

sFileName=`ls -lrt $sTmpPath/$1* | grep ^- | grep -v grep |  head -1 | awk 'BEGIN { FS="/" } { print $NF }'`

ここ

  1. $sTmpPathUNIXサーバーの一時パスが含まれています。
  2. 渡される最初のパラメータはファイル名です。

ありがとう
Gautam

答え1

  • ls -lrt:ディレクトリ以外のパラメータを一覧表示します。コンテンツそのディレクトリパラメータの形式は、時間(修正時間)逆順(最も古いものから最新のものまで)lの ong 形式です。しなければならない。rtls -lrtd --
  • $sTmpPath/$1*:should be:"$sTmpPath/$1"*の目的は、$sTmpPath私が考える名前で始まるファイルのリストをリストすることです$1
  • grep ^-。いくつかの殻の中で特別なgrep '^-' ので、より良いです。^で始まる行を保持してください-。 thisの出力では、ls -lこれは次のようになります。定期的な他の種類のファイル(ディレクトリ、シンボリックリンク、ソケット...)は除外されます。一部のファイル名またはシンボリックリンク先に改行文字が含まれていると、偽の肯定が発生する可能性があります。
  • grep -v grep。除外を含むおそらくgrepこの記事を書いた人は、このps | grep -v grepトリックについて考えていたでしょう。ここには何の意味もありません。
  • head -1。古代フォームhead -n 1:入力の最初の行を選択します。したがって、最も古い一致ファイルの行です。
  • BEGIN{FS = "/"}:使用したいawkフィールド区切り記号をに設定します/-F/
  • {print $NF}:最後に区切られたフィールド、つまりファイル名である/最後のフィールドの後の行部分を印刷します。との作業/awk完了することができます。grephead

$sTmpPathしたがって、このスクリプトの目的は、.で終わる名前を報告するようです$1

これは、以下のように単純化され、部分的に変更できます。

ls -nrtd -- "$sTmpPath/$1"* | awk -F/ '/^-/ {print $NF; exit}'

-n代わりに、これを使用して-luids / gidをユーザー名/グループ名に不必要に変換するのを防ぎます。

ファイル名またはシンボリックリンク先の両方に改行文字が含まれていないとします。

それでzsh、あなたはただoldest=($sTmpPath/$1*(.Om[1]:t))

関連情報