2011-05-12 28 views
-1

首先,我對bash的用法和語法知識非常有限。一切我竟然被「黑客」一起做,所以如果你看到了愚蠢的事情,請讓我知道:)通過Bash複製/區分未版本化的SVN文件

我想寫一夜間「備份」腳本,將拋出的svn diff結果成獨立文件夾。我的問題是,該命令忽略未版本控制的文件。我想差異包括這些文件或整個文件本身。

另外:如果在資源管理器窗口中右鍵單擊並選擇Team -> Create Patch,Eclipse(pdt)即可完成此操作。這可能是Subclipse的一個特性。

我已經搜索了很高的一些方式來強制輸出svn diff,但我很確定這是不可能的。

這裏是我到目前爲止(目標是所有版本的文件複製到我的備份與當前日期文件夾):

svn status | grep ^? | awk '{print $2}' 
File1.php 
File2.php 
File3.php 

此輸出文件的相對到svn status被調用的路徑列表。我嘗試管道cp到最後,但遇到了與命名有關的問題。

TLDR:我想所有版本的文件,追加到的svn diff > backups/project.diff所以它包含版本和未受控的變化的結果。

或者,我如何將所有未版本控制的文件複製到特定位置(正如我在上面的示例中所做的那樣)?

版本的相關信息:Ubuntu的11.04,SVN 1.6.12

回答

2

如果我理解正確的話,好像你要xargs。您可以複製:

svn status | grep ^? | awk '{print $2}' | xargs -J % cp % backups/ 

或做用cat追加:

svn status | grep ^? | awk '{print $2}' | xargs cat >> backups/project.diff 

小心的文件名中的空格。

+0

我相信我們在同一頁面上。你能解釋一下xargs部分(或者指出我的方向)嗎?我找不到'-J'選項或手冊頁中的'%'符號。 'cat'解決方案很接近,但是它可以用'diff'語法來編寫嗎? – 2011-05-12 21:27:50

+0

@Mike B,爲了獲得'diff'語法,你可以嘗試使用'/ dev/null'來區分 - 你可以用'xargs'來做到這一點。就「xargs」本身而言,我認爲我鏈接的手冊頁解釋得非常好。通常'xargs'採用標準輸入並將其用作指定實用程序的命令行參數。我在那裏使用'-J%'將這些參數*放在目標目錄之前。這個選項意味着「下次你看到一個'%'時,把標準輸入放在那裏」。默認情況下只是將其粘貼在命令行的末尾。我會嘗試'diff'語法版本並將其編輯到我的答案中。 – 2011-05-12 22:47:34

+0

感謝您的擴展。只是我需要的信息。非常感謝。 – 2011-05-13 02:32:38