僅 scp 某些文件

僅 scp 某些文件

我正在嘗試透過 ssh 將更改的檔案複製到 godaddy。 Godaddy 很糟糕,所以他們當然不允許 rsync。我可以使用 scp,但我真的只想複製更改的檔案。我認為這是不可能的,所以我想知道是否可以只 scp 所有 php 檔案。

不過,有很多子目錄,所以我需要使用 -r 選項。

有沒有辦法使用 scp 遞歸複製所有副檔名為 的檔案php?像這樣:

scp -r -name "*php" /local/html/ user@server:/home/html/ (不起作用)

期望的結果

//在本機上
$ 尋找./來源

源/1.php
源/2.php
源/子
源/子/3.php
源/子/4.php
來源/子/不要-copy.txt
來源/子/請勿複製.png
來源/子/子2
源/sub/sub2/5.php
源/sub/sub2/6.php

//複製檔案的指令
$ [此處為 scp 指令]

//在遠端伺服器上
$ 尋找 ./目的地

目的地/1.php
目的地/2.php
目的地/子
目的地/sub/3.php
目的地/sub/4.php
目的地/子/子2
目的地/sub/sub2/5.php
目的地/sub/sub2/6.php

這不起作用

//在本機上
$ 尋找./來源

源/1.php
源/2.php
源/子
源/子/3.php
源/子/4.php
來源/子/不要-copy.txt
來源/子/請勿複製.png
來源/子/子2
源/sub/sub2/5.php
源/sub/sub2/6.php

//複製檔案的指令
$ 光碟源; scp -r *.php 使用者@遠端:/目的地

//在遠端伺服器上
$ 尋找 ./目的地

目的地/1.php
目的地/2.php

也許我們也可以嘗試使用 find,但我很確定這一點不會按原樣工作:

尋找 ./source -name "*.php" -exec scp {} user@remote:{} \;

這行不通,因為我認為你不能{}在查找中使用多個運算符。

此外,讓路徑在遠端伺服器上對齊可能很棘手,例如,如果 find 返回/users/johndoe/documents/source/1.php並且您希望它最終位於/home/jane/www/destination/1.php遠端伺服器上。

答案1

當主機只允許推送內容而不允許 rsync 時,我會執行以下操作:

  • 在本機電腦上建立一個「影子」目錄以類似目標結構
  • 用於rsync推送到此影子目錄,並捕獲輸出(--log-file如果您想編寫腳本,則可以使用)
  • rsync輸出中確定需要刪除的文件,或推送並製作列表
  • 也許(取決於您推送的方式):從僅需要更改的文件創建一個包
  • 啟動你的推送工具 - ftp、scp 等 - 並讓它在列表中的文件上運行

答案2

你能不做嗎scp -r *.php destination

答案3

scp -r user@ip:/data/files/*.php /tmp/files/

相關內容