-1

У меня есть команда для вышеуказанного вопроса. Может ли кто-нибудь объяснить мне команду ниже?

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 ответ1

0

Сценарий, на который вы ссылаетесь, написан плохо, и может работать не так, как вы ожидаете.

Вот разбивка того, что он делает:

ДАТА = date +%m%d%Y-%H%M%S

Сохраните текущую дату в формате DATE в формате, подобном «10192016-171249». Обратитесь к "дате свидания" для деталей. Это, кстати, не лучший способ сохранить дату / время. Использование формата ГГГГММДД для части даты является наиболее предпочтительным для быстрой ссылки / сортировки.

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 logs_ hostname _ $ {DATE} .zip $ i

Используя цикл for для приведенной выше команды, каждый из этих файлов затем добавляется в zip-файл с именем:

logs_`hostname`_${DATE}.zip

где hostname - это имя вашего хоста, а "$ {DATE}" - это DATE, сохраненная ранее. Так что если ваше имя хоста BLUERAY и вы используете DATE выше, вы получите файл с именем:

logs_BLUERAY_10192016-171249.zip

Опять же, этот сценарий написан очень плохо, и вам определенно не следует использовать его (или любой другой, написанный тем же автором), чтобы научиться писать сценарии ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .