Eu tenho um comando para a pergunta acima. Alguém poderia me explicar o comando abaixo?
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
Responder1
O script ao qual você está se referindo não está bem escrito e pode não funcionar conforme o esperado.
Aqui está o detalhamento do que ele está fazendo:
DATA=
date +%m%d%Y-%H%M%S
Armazene a data atual em DATE em um formato como "10192016-171249". Consulte "man date" para obter detalhes. A propósito, esta não é a melhor maneira de armazenar uma data/hora. Usar o formato AAAAMMDD para a parte da data é muito preferido por motivos de referência/classificação rápida.
ls -lt *.log*
Isso obtém uma lista de diretórios de todos os arquivos que correspondem ao padrão "*.log*" no diretório atual. Por exemplo, poderia ser algo como:
-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 de outubro"
Em seguida, ele "extrai" apenas as linhas onde "11 de outubro" está presente, o que daria:
-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:
Em seguida, ele extrai novamente apenas aqueles onde "12:" ou "13:" ou "14" estão presentes: (novamente muito mal feito, pois se aplica ao campo de horas, mas também aos campos de minutos e segundos)
-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 '{imprimir $ 9}'
Dessas linhas restantes, extrai o 9º elemento (o nome do arquivo):
fontconfig.log
zip logs_
hostname
_${DATA}.zip $i
Usando um loop "for" em torno do comando acima, cada um desses arquivos é então adicionado a um arquivo zip cujo nome é:
logs_`hostname`_${DATE}.zip
onde hostname
é o nome do seu host e "${DATE}" é a DATA armazenada anteriormente. Portanto, se o seu nome de host for BLUERAY e usar a DATA acima, você obterá um arquivo chamado:
logs_BLUERAY_10192016-171249.zip
Novamente, este script está muito mal escrito e você certamente não deveria usá-lo (ou qualquer outro escrito pelo mesmo autor) para aprender a escrever scripts...