我已經得到上述問題的命令了。誰能解釋一下下面的命令嗎?
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 中。詳情請參閱「男人約會」。順便說一句,這不是儲存日期/時間的最佳方式。出於快速參考/排序的原因,更傾向於使用 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 '{印 $9}'
從剩餘的行中,它提取第 9 個元素(檔案名稱):
fontconfig.log
zip 日誌
hostname
_ _${DATE}.zip $i
使用上述命令的「for」循環,然後將每個檔案新增到一個 zip 檔案中,該檔案的名稱為:
logs_`hostname`_${DATE}.zip
其中hostname
是您的主機名,「${DATE}」是先前儲存的日期。因此,如果您的主機名稱是 BLUERAY 並使用上面的日期,您將獲得一個名為:
logs_BLUERAY_10192016-171249.zip
再說一次,這個腳本寫得非常糟糕,你當然不應該使用它(或同一作者編寫的任何其他腳本)來學習如何編寫腳本...