ls locales/remotos

ls locales/remotos

Quiero tomar líneas relevantes de un registrador SNMP en tiempo real y moverlas a mi servidor de aplicaciones para verificarlas. La segunda mitad está bien, scpestá funcionando. La primera mitad me está causando algo de pena.

Lo que quiero hacer es comprobar los tres archivos de registro más recientes para ver los mensajes relevantes. Entonces yo haría: [user@SNMPServer]$ cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files

trap.csv trap.csv.2019-05-31_07_00_01 trap.csv.2019-05-31_06_00_01

Lo cual es genial, porque luego planeo:

[user@SNMPServer]$ grep $ipAddress $files

Lo cual nuevamente funciona bien cuando lo ejecuto en el servidor SNMP.

Cuando lo hago desde mi VM Sin embargo,
admin@alarmux:~$sudo ssh [email protected] "cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files"

Obtengo este resultado:
assets bash: testerlog: command not found bash: count.txt: command not found

Estos son los ls -tresultados del directorio de inicio de mi VM, no del remoto. ¿Me faltan personajes de escape en alguna parte?

Respuesta1

Comillas retrospectivas e $( … )interpola entre comillas dobles. Utilice comillas simples y funcionará.

sudo ssh [email protected] 'cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files'

O evite la subcapa por completo con xargs:

sudo ssh [email protected] 'ls -td /var/opt/OV/log/nnm/* | grep -m 3 trap.csv | xargs grep '$ipAddress

Respuesta2

Con el zshshell, los tres archivos con la marca de tiempo de modificación más reciente, con nombres de archivo que coincidan *trap.cvsen el /var/opt/OV/log/nnmdirectorio, se tendrían con el patrón

/var/opt/OV/log/nnm/*trap.cvs(.om[1,3])

donde (...)modifica el comportamiento del patrón anterior. .selecciona solo archivos normales (no nombres de directorios, etc.) y omordena disminuyendo la marca de tiempo de modificación. Devuelve [1,3]solo las primeras tres coincidencias (o menos si hay menos coincidencias).

Entonces, si tiene el zshshell instalado en la máquina remota, podrá hacer

ssh [email protected] zsh -c 'grep -wF "$1" /var/opt/OV/log/nnm/*trap.cvs(.om[1,3])' zsh "$ipAddress"

Esto se iniciaría greppara buscar la dirección IP guardada $ipAddressen los tres archivos modificados más recientemente en el sistema remoto.

Las banderas utilizadas con grephacen que se utilicen comparaciones de cadenas en lugar de coincidencias de expresiones regulares (es decir -F), y requiere que la cadena coincidente sea una palabra completa (es decir -w, ; por lo que 123.123.123.123no coincide con 23.123.123.1).

información relacionada