2015-02-08 34 views
0

我正試圖在遠程服務器上找到包含特定文本的文件。如果有多個文件,它應該列出包含該文本的所有文件。使用shell腳本在遠程計算機上查找帶有特定文本的文件

下面是我已經能夠做出的聲明,但不幸的是我在執行時收到錯誤消息。請指教。

命令:

sshpass -p abc123 ssh [email protected] find /root/Downloads/test/app/beta/System* -type f -mmin -60 | xargs grep -E "put" 

錯誤消息:

grep: /root/Downloads/test/app/beta/SystemOut_qqq: No such file or directory 
grep: /root/Downloads/test/app/beta/SystemOut_qwp: No such file or directory 

回答

1

通配符正在本地展開。您需要引用它以將其傳遞給遠程主機。

此外,爲了使grep能夠檢查這些文件,它也需要在遠程主機上運行,​​因此我們引用了整個命令行。

根據您所述的要求,我添加了一個-l選項來列出包含匹配的文件,而不是打印每個匹配。由於您的示例表達式是靜態字符串,因此我從grep -E更改爲grep -F。如果您想搜索正則表達式,則可能需要撤消該更改。

sshpass -p abc123 ssh [email protected] 'find /root/Downloads/test/app/beta/System* -type f -mmin -60 | xargs grep -F -l "put"' 
+0

很抱歉,但我得到了同樣的錯誤了。 grep:/ root/Downloads/test/app/beta/SystemOut_qqq:沒有這樣的文件或目錄 grep:/ root/Downloads/test/app/beta/SystemOut_qwp:沒有這樣的文件或目錄 – 2015-02-08 12:56:51

+0

該命令正​​在查找新修改了兩個文件,但只有「SystemOut_qqq」中包含「put」文本。但是我得到的輸出是「沒有這樣的文件或目錄」以及上面的文件名。 – 2015-02-08 12:58:24

+0

抱歉,粗心編輯導致錯誤引用,儘管我有自己的指示。現在試試。 – tripleee 2015-02-08 13:42:37

1

試着這麼做:

sshpass -p abc123 ssh [email protected] find /root/Downloads/test/app/beta/System -type f -mmin -60 -exec grep -E "put" {} \; 
+0

GOT和出錯信息的發現:缺少參數'-exec」 – 2015-02-08 12:53:32

相關問題