誰かがこの言葉を解釈できますか?
sFileName=`ls -lrt $sTmpPath/$1* | grep ^- | grep -v grep | head -1 | awk 'BEGIN { FS="/" } { print $NF }'`
ここ
$sTmpPath
UNIXサーバーの一時パスが含まれています。- 渡される最初のパラメータはファイル名です。
ありがとう
Gautam
答え1
ls -lrt
:ディレクトリ以外のパラメータを一覧表示します。コンテンツそのディレクトリパラメータの形式は、時間(修正時間)逆順(最も古いものから最新のものまで)l
の ong 形式です。しなければならない。r
t
ls -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
完了することができます。grep
head
$sTmpPath
したがって、このスクリプトの目的は、.で終わる名前を報告するようです$1
。
これは、以下のように単純化され、部分的に変更できます。
ls -nrtd -- "$sTmpPath/$1"* | awk -F/ '/^-/ {print $NF; exit}'
-n
代わりに、これを使用して-l
uids / gidをユーザー名/グループ名に不必要に変換するのを防ぎます。
ファイル名またはシンボリックリンク先の両方に改行文字が含まれていないとします。
それでzsh
、あなたはただoldest=($sTmpPath/$1*(.Om[1]:t))
。