本地/遠端ls

本地/遠端ls

我想即時從 SNMP 記錄器中抓取相關行並將它們移至我的應用程式伺服器進行檢查。下半場還好,scp正在發揮作用。前半部讓我有些悲傷。

我想要做的是檢查三個最新日誌檔案中的相關訊息。所以我會這樣做: [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

這很棒,因為我接下來計劃:

[user@SNMPServer]$ grep $ipAddress $files

當我在 SNMP 伺服器上運行它時,它再次工作正常。

當我從我的虛擬機器執行此操作時,
admin@alarmux:~$sudo ssh [email protected] "cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files"

我得到這個輸出:
assets bash: testerlog: command not found bash: count.txt: command not found

這些是ls -t我的虛擬機主目錄的結果,而不是遠端的結果。我是否在某處缺少轉義字元?

答案1

反引號並$( … )在雙引號內插入。使用單引號就可以了。

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

或使用 xargs 完全避免使用子 shell:

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

答案2

使用zshshell,具有最近修改時間戳記且檔案名稱在目錄*trap.cvs中匹配的三個檔案/var/opt/OV/log/nnm將具有以下模式

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

其中(...)修改前面模式的行為。 .僅選擇常規檔案(不選擇目錄名稱等)並om透過減少修改時間戳進行排序。僅返回[1,3]前三個匹配項(如果匹配項較少,則返回更少)。

因此,如果您zsh在遠端電腦上安裝了 shell,您將能夠執行以下操作

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

這將啟動grep查找$ipAddress遠端系統上三個最近修改的檔案中保存的 IP 位址。

使用的標誌grep使其使用字串比較而不是正則表達式匹配(即-F),並且它要求匹配字串是完整單字(即-w; 因此123.123.123.123與 不匹配23.123.123.1)。

相關內容