2011-09-29 95 views
1

我創建了一個bash腳本,可以將C源文件和頭文件從另一個主機中的特定目錄自動複製到我在當前主機上的目錄。將特定文件類型從一臺主機複製到另一臺主機

它當前生成此命令: SSH主機2「CD DIR1/DIR2 & &查找-maxdepth 1 -regextype POSIX擴展-regex '*。(C | H)' |焦油-T - , - C - f - 「|焦油XF -

問題是,我得到這個錯誤: 「焦油:這看起來並不像一個tar歸檔」

此錯誤是最終的焦油輸出(焦油XF - ),因爲某些原因,獲取管道的tar文件已損壞。

如果我這樣做,而不是使用ssh,tar和scp的組合,它工作正常,但這需要我輸入密碼(對於host2)兩次(一次爲ssh,一次爲scp)。我可以輸入密碼作爲腳本的參數,但我不希望它出現在我的bash歷史記錄中。

任何想法?

回答

2

爲什麼不使用rsync來完成這項工作呢?它支持--filter,它完全符合您的需求。這裏有一個例子:

http://ubuntuforums.org/showthread.php?t=1240150

+0

謝謝。我設法做到: rsync --include = *。c --include = *。h --exclude = * $ SOURCE_HOST:$ PATH/*。 –

+0

它不適用於我:** rsync -avz --include = *。h --exclude = * SRC_DIR DST_DIR **從SRC_DIR複製.h文件,但不是RECURSIVELY。應用**遞歸**選項無助於:( – kappa

+0

加入'--include ='* /''選項解決了這個問題 – kappa

3

你有沒有考慮過使用rsync適當--include--exclude標誌? rsync可以通過ssh進行復制,並且您應該可以使用單個命令複製整個樹(或子集)。另外,如果您唯一的擔心是必須輸入密碼,您也可以嘗試使用授權密鑰(也可能是ssh-agent),因此您無需輸入密碼即可訪問其他主機。

+0

謝謝,我設法做到了這一點:rsync --include = *。c --include = *。h --exclude = * $ SOURCE_HOST:$ PATH/*。 –

相關問題