2012-05-03 33 views
3

我有當前工作副本中已在本地修改的文件列表。大約有50個文件已被更改。僅將SVN修改後的文件複製到另一個目錄

我可以這樣做得到這些文件的列表:

svn st | ack '^M' 

有沒有一種方法,我可以將這些文件和只有這些文件複製到另一個目錄,這就是所謂backup

+0

請編輯您的帖子,以顯示你的svn管道產生的輸出的一小部分。然後,我們可以輕鬆幫助。它很可能可以作爲單線程來完成。祝你好運。 – shellter

回答

4

假設ACK是如grep ...你可以這樣做:

 
cp `svn st | ack '^M' | cut -b 8-` backup 

我會發布此作爲評論...但我不知道如何逃避評論...反引號

+0

是否有可能這樣做和_maintain_文件所在的目錄?例如,如果修改過的文件在'/ images'中,那麼當將文件複製到'/ backup'目錄時,我可以創建/複製'/ images'文件夾嗎? – crmpicco

+0

由於某種原因,在mac上面的命令沒有工作。我使用了以下svn status | grep'^ [ADMR]'| cut -b 8- | xargs -I'{}'cp {}/directory/ –

+3

@forsvarir:反引號(至少在bash中)可以通過$() - constructs(btw允許嵌套表達式)進行交換。我解決了「維護目錄」問題:'爲我在$(svn st | grep^[MA] | cut -b 8-); do x =「b/$(dirname $ i)」; mkdir -p $ x; cp「$ i」「$ x」; done'。希望這可以幫助。 –

1

這會做(慶典):

#!/bin/bash 
set -eu 

# for each modified file 
for f in $(svn st| awk '/^M/{print $2}'); do 
    # create a directory under backup root and copy the file there 
    mkdir -p .../backup/${f%/*} && cp -a $f .../backup/$f 
done 
+0

我在運行該代碼時遇到此錯誤。道歉,我不熟悉bash腳本。 'copy_modified_files.sh:第5行:尋找匹配時意外的EOF)'' – crmpicco

+0

@crmpicco - 之前丟失括號;做' – bobah

2
svn status | grep '^[ADMR]' | cut -b 8- | xargs -I '{}' rsync -R {} /directry/ 
+0

我剛剛嘗試了這一點,但它沒有維護文件所在的目錄。所以如果你有一個/inc/picco.txt文件,那麼它不會創建'inc /'。 – crmpicco

+0

rsync -R應保留目錄結構。我已經更新了腳本。請讓我知道這是否適合你。 –

1

在Windows 8中,可以在當前的svn目錄使用這個命令:

(FOR /F "tokens=2 delims== " %i IN ('svn st ^| findstr "^[ADMR]"') DO @echo %i & echo f| xcopy /f /y %i c:\projects\backup\%i) 
+0

試圖運行這個,但它有一些目錄錯誤 – Dmitriy

0

這對我的作品:

svn status | grep ^M | awk '{print $2}' | xargs -I '{}' cp --parents {} /backup/ 
相關問題