У меня есть команда для вышеуказанного вопроса. Может ли кто-нибудь объяснить мне следующую команду?
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
Сохраните текущую дату в DATE в формате типа "10192016-171249". Подробности см. в "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 "11 окт"
Затем он «извлекает» только те строки, где присутствует «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
_${ДАТА}.zip $i
Используя цикл «for» вокруг указанной выше команды, каждый из этих файлов затем добавляется в zip-файл с именем:
logs_`hostname`_${DATE}.zip
где hostname
- имя вашего хоста, а "${DATE}" - это ДАТА, сохраненная ранее. Так что если имя вашего хоста - BLUERAY и используя ДАТУ выше, вы получите файл с именем:
logs_BLUERAY_10192016-171249.zip
Опять же, этот сценарий написан очень плохо, и вам определенно не следует использовать его (или любой другой сценарий, написанный тем же автором) для обучения написанию сценариев...