上記の質問に対するコマンドを入手しました。どなたか下記のコマンドを説明していただけますか?
DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done
答え1
あなたが参照しているスクリプトは、まったく適切に記述されておらず、期待どおりに動作しない可能性があります。
これが何をしているかの内訳は次のとおりです。
日付=
date +%m%d%Y-%H%M%S
現在の日付を「10192016-171249」のような形式で DATE に保存します。詳細については、「man date」を参照してください。ちなみに、これは日付/時刻を保存する最良の方法ではありません。日付部分には、クイック参照/並べ替えの理由から、YYYYMMDD 形式を使用することをお勧めします。
ls -lt *.log*
これにより、現在のディレクトリ内のパターン「*.log*」に一致するすべてのファイルのディレクトリ リストが取得されます。たとえば、次のようになります。
-rw-r--r-- 1 root root 174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm 414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root 209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root 1333 Apr 9 2015 pm-powersave.log.1
grep "10月11日"
次に、「Oct 11」が存在する行のみを「抽出」します。次のようになります。
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
grep -E '12:|13:|14:
次に、「12:」または「13:」または「14」が存在するものだけを再度抽出します。(これも時間フィールドだけでなく、分と秒フィールドにも適用されるため、非常に不十分です)
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
awk '{print $9}'
残りの行から、9 番目の要素 (ファイル名) を抽出します。
fontconfig.log
zip ログ
hostname
_ _${DATE}.zip $i
上記のコマンドを「for」ループで囲むと、各ファイルは次のような名前の zip ファイルに追加されます。
logs_`hostname`_${DATE}.zip
ここでhostname
、 はホスト名で、 "${DATE}" は以前に保存した日付です。したがって、ホスト名が BLUERAY で、上記の日付を使用すると、次の名前のファイルが作成されます。
logs_BLUERAY_10192016-171249.zip
繰り返しますが、このスクリプトは非常に下手に書かれているので、スクリプトの書き方を学ぶためにこのスクリプト (または同じ作者が書いた他のスクリプト) を使用するべきではありません...