簡體   English   中英

通過ssh從最新更改的目錄中的Tar文件

[英]Tar files from the latest changed directory via ssh

我試圖通過ssh將tar存檔,但我認為在此任務中沒有什么棘手的問題。 但是然后我需要從包含最近更改的目錄的路徑中壓縮tar文件。 為了得到這個,我正在使用這樣的命令:

cd  "$(\ls -1dt ./*/ | head -n 1)"

整個命令如下所示:

ssh root@$ip "cd /dir1/dir2/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cd /dir3/ && tar -cpf - *.log" > $dir/out.tar

不幸的是我得到:

./Recent/:沒有這樣的文件或目錄

我試圖更改\\ls -1dt ./*/ | head -n 1 \\ls -1dt ./*/ | head -n 1\\ls -1dt /*/ | head -n 1 \\ls -1dt /*/ | head -n 1

然后我得到:

cd:dir3 /:沒有這樣的文件或目錄

我正在搜索/ dir1 / dir2 /中所有最近更改的dir目錄中的所有目錄都包含dir3目錄,這就是為什么以前的錯誤是不可能的。

另外,如果我通過ssh手動進入遠程計算機並逐個執行每個命令(不同的cd,搜索,tar),搜索將正確無誤地工作,但是在我的情況下,我需要“整個字符串”命令,因為它是只是我整個自動化腳本的一部分。

如何解決呢?

謝謝

您將提供給ssh的命令用雙引號引起來,這會導致兩種不良行為:

  1. 您的直接問題是,本地外殼程序在將加引號的字符串傳遞給ssh之前先對其進行擴展。 這樣,它將在本地執行子shell( $(ls ...) ),這很可能就是為什么遠程服務器抱怨找不到結果目錄的原因

  2. 您有兩個雙引號字符串和它們之間的子外殼。 只要subshel​​l返回一個單詞就可以,但是如果它的結果​​包含多個單詞,您會突然向ssh傳遞多個參數,這很可能會失敗

通過用單引號將希望遠程主機執行的命令括起來,可以解決/避免這兩個問題:

ssh root@$ip 'cd /dir1/dir2/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cd /dir3/ && tar -cpf - *.log' > $dir/out.tar

在這種情況下,您的本地外殼程序不會擴展該字符串,並且遠程主機將正確執行以下命令(在該命令中,它將擴展雙引號的部分,執行子外殼程序):

cd /dir1/dir2/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cd /dir3/ && tar -cpf - *.log

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM