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

发布于 2024-08-14 06:44:50 字数 684 浏览 4 评论 0原文

我正在尝试在 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 状态路径,但它似乎没有执行任何操作。

I'm trying to use xargs on a Cygwin Windows system to remove SVN files deleted locally.

I run the following command that generates the following output:

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

Then when I run the following command I get the following errors:

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


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

I've tried using cygpath to convert the svn status paths but it doesn't appear to do anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

长安忆 2024-08-21 06:44:51

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

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

Using cygpath to change the paths to unix format should work I think.. '\' is an escape character in the linux world, looks like xargs handles it like one. Something like:

svn status | grep '^\!' | sed 's/! *//' | cygpath -m | xargs -I% svn rm %
溺渁∝ 2024-08-21 06:44:51

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

Specify the cygwin svn (installing it if needed) as /usr/bin/svn so that you get /'s in the output from svn status. But be careful! You don't want to mix different svn versions like 1.4, 1.5, 1.6, or you'll be in for even more fun.

醉城メ夜风 2024-08-21 06:44:51

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

或者将所有内容更改为使用 cygwin 的 svn 版本。

根本问题是 xargs 正在重新解释数据,无论是因为这就是它在 cygwin 上的工作方式,还是因为它必须通过 shell 传递所有内容(然后执行此操作),我不确定(直到明天才能测试) 。

Use sed to change the \ into /. (Forward slashes work with the Windows API and almost all Windows programs, they have to be specifically rejected to not work.) You want to keep using the same version of svn (as you might be using elsewhere, say with a GUI) so you don't have to worry about corrupting your data.

Or change everything over to using cygwin's version of svn.

The root problem is xargs is re-interpreting the data, whether because that's how it works on cygwin or it has to pass everything through a shell (which then does it), I'm not sure (and can't test until tomorrow).

剩一世无双 2024-08-21 06:44:51

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

                                 xargs -I% svn rm "%"

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

rm c:\Cygwin\My ; rm 东西

If I understand your problem correctly, then I would make one small adjustment: Add double quotes around the replacement variable, in the xargs statement:

                                 xargs -I% svn rm "%"

Otherwise, a given path which contains a whitespace will tell rm to delete two files or more, none of which exist. I.E. a line like c:\Cygwin\My Stuff passed as input to rm becomes

rm c:\Cygwin\My ; rm Stuff

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文