2009-12-07 39 views
1

我想在Cygwin Windows系统上使用xargs来删除本地删除的SVN文件。cygwin上的XArgs命令是损坏文件路径

我运行下面的命令,其产生以下输出:

svn status | grep '^\!' | sed 's/! *//' 

weblings-WebPlatform中\厂商\码头-7.0.0.pre5 \上下文可用\测试annotations.d \ META- INF \ MANIFEST.MF weblings-WebPlatform中\供应商\码头,7.0.0.pre5 \上下文可用\ TEST-annotations.d \ WEB-INF \码头-env.xml

然后当我运行以下命令我得到以下错误:

svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm % 


svn: 'weblings-webplatformvendorjetty-7.0.0.pre5contexts-availabletest-annotations.dMETA-INFMANIFEST.MF' does not exist 

我试过使用cygpath转换svn状态路径,但它似乎没有做任何事情。

+0

嗯。我从cygwin下的'svn status'中得到'/'。 – retracile 2009-12-07 23:24:23

+0

您使用的是svn: “which svn” 我的是: “/ cygdrive/c/Program Files(x86)/ CollabNet/Subversion Client/svn” – Dougnukem 2009-12-07 23:27:30

+0

Mine是'/ usr/bin/svn',所以它是来自cygwin的。 – retracile 2009-12-07 23:30:07

回答

3

使用cygpath将路径更改为unix格式应该可以工作我认为..'\'是Linux世界中的转义字符,看起来像xargs一样处理它。喜欢的东西:

svn status | grep '^\!' | sed 's/! *//' | cygpath -m | xargs -I% svn rm % 
0

指定为/usr/bin/svn cygwin的svn(如果需要安装它),这样您在输出svn status得到/的。不过要小心!你不想混合不同的svn版本,比如1.4,1.5,1.6,否则你会变得更有趣。

0

使用sed将\更改为/。 (正斜线与Windows API和几乎所有的Windows程序一起工作,他们必须被拒绝才能工作。)你想继续使用相同版本的svn(就像你在其他地方使用的那样,用GUI说),所以你不必担心会破坏数据。

或者改变一切,以使用cygwin的svn版本。

根本问题是xargs重新解释数据,无论是因为它是如何在cygwin上工作,或者它必须通过一个shell(然后这样做),我不知道(也不能测试,直到明天)。

0

如果我正确理解你的问题,那么我会做一个小的调整:加双引号来替代变量,在xargs的语句:

        xargs -I% svn rm "%" 

否则,它包含一个空格一个给定的路径会告诉rm删除两个或更多文件,其中没有一个存在。 I.E.像c:\ Cygwin \ My Stuff这样的行作为输入传递给rm变为

rm c:\ Cygwin \ My; rm东西