Tengo un comando para la pregunta anterior. ¿Alguien podría explicarme el siguiente comando?
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
Respuesta1
El guión al que te refieres no está nada bien escrito y es posible que no funcione como esperabas.
Aquí está el desglose de lo que está haciendo:
FECHA=
date +%m%d%Y-%H%M%S
Almacene la fecha actual en FECHA en un formato como "10192016-171249". Consulte "fecha del hombre" para obtener más detalles. Esta, por cierto, no es la mejor manera de almacenar una fecha/hora. Se prefiere usar el formato AAAAMMDD para la parte de la fecha por motivos de referencia/clasificación rápida.
ls -lt *.log*
Esto obtiene una lista de directorios de todos los archivos que coinciden con el patrón "*.log*" en el directorio actual. Por ejemplo, podría 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 octubre"
Luego "extrae" sólo las líneas donde está presente "11 de octubre", lo que daría:
-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:
Luego extrae nuevamente sólo aquellos donde está presente "12:" o "13:" o "14": (nuevamente muy mal hecho ya que esto se aplica al campo de horas, pero también a los campos de minutos y 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}'
De esas líneas restantes, extrae el noveno elemento (el nombre del archivo):
fontconfig.log
registros zip_
hostname
_${FECHA}.zip $i
Usando un bucle "for" alrededor del comando anterior, cada uno de esos archivos se agrega a un archivo zip cuyo nombre es:
logs_`hostname`_${DATE}.zip
donde hostname
está el nombre de su host y "${DATE}" es la FECHA almacenada anteriormente. Entonces, si su nombre de host es BLUERAY y usa la FECHA anterior, obtendrá un archivo llamado:
logs_BLUERAY_10192016-171249.zip
Nuevamente, este guión está muy mal escrito y ciertamente no deberías usarlo (ni ningún otro escrito por el mismo autor) para aprender a escribir guiones...