Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn cygwin上的XArgs命令正在损坏文件路径_Svn_Unix_Shell_Scripting_Cygwin - Fatal编程技术网

Svn cygwin上的XArgs命令正在损坏文件路径

Svn cygwin上的XArgs命令正在损坏文件路径,svn,unix,shell,scripting,cygwin,Svn,Unix,Shell,Scripting,Cygwin,我正在尝试在Cygwin Windows系统上使用xargs删除本地删除的SVN文件 我运行以下命令,生成以下输出: svn status | grep '^\!' | sed 's/! *//' weblings webplatform\vendor\jetty-7.0.0.pre5\contexts available\test annotations.d\META-INF\MANIFEST.MF weblings webplatform\vendor\jetty-7.0.0.pre5\

我正在尝试在Cygwin Windows系统上使用xargs删除本地删除的SVN文件

我运行以下命令,生成以下输出:

svn status | grep '^\!' | sed 's/! *//' 
weblings webplatform\vendor\jetty-7.0.0.pre5\contexts available\test annotations.d\META-INF\MANIFEST.MF weblings webplatform\vendor\jetty-7.0.0.pre5\contexts available\test annotations.d\WEB-INF\jetty-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状态路径,但它似乎没有任何作用。

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

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

将cygwin
svn
(如果需要安装它)指定为
/usr/bin/svn
,以便在
svn状态的输出中获得
/
。但是要小心!您不想混合使用不同的svn版本,如1.4、1.5、1.6,否则您将获得更多乐趣。

使用sed将
\
更改为
/
。(前向斜杠适用于Windows API和几乎所有Windows程序,必须明确拒绝它们才能正常工作。)您希望继续使用相同版本的svn(就像您在其他地方使用的一样,比如GUI),这样您就不必担心损坏数据

或者改用cygwin版本的svn


根本问题是xargs正在重新解释数据,无论是因为它在cygwin上是这样工作的,还是因为它必须通过一个shell传递所有信息(然后由shell执行),我不确定(明天才能进行测试)。

如果我正确理解您的问题,然后我将做一个小的调整:在xargs语句中,在替换变量周围添加双引号:

                                 xargs -I% svn rm "%"
否则,包含空格的给定路径将告诉rm删除两个或多个文件,而这些文件都不存在。例如,像c:\Cygwin\My Stuff这样的行作为输入传递到rm成为


rm c:\Cygwin\My;rm Stuff

Hm.我从cygwin下的
/svn status
中获得
/
。你在使用哪个svn:“哪个svn”是我的:“/cygdrive/c/Program Files(x86)/CollabNet/Subversion Client/svn”我的是
/usr/bin/svn
,所以它是cygwin的版本。(“1.5.5.5(r34862)”因为它的价值)