2012-05-03 68 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/ 
相关问题