Команда XArgs на cygwin изменяет пути к файлам - PullRequest
1 голос
/ 08 декабря 2009

Я пытаюсь использовать xargs в системе Cygwin Windows для удаления локально удаленных файлов SVN.

Я запускаю следующую команду, которая генерирует следующий вывод:

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

weblings-webplatform \ поставщика \ Причал-7.0.0.pre5 \ контексты доступный \ тест-annotations.d \ META-INF \ MANIFEST.MF weblings-webplatform \ поставщика \ Причал-7.0.0.pre5 \ контексты доступный \ тест-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, но, похоже, ничего не делает.

Ответы [ 4 ]

3 голосов
/ 08 декабря 2009

Использование cygpath для изменения путей к формату unix должно работать, я думаю .. '\' - это escape-символ в мире linux, похоже, xargs обращается с ним как с одним. Что-то вроде:

svn status | grep '^\!' | sed 's/! *//' | cygpath -m | xargs -I% svn rm %
0 голосов
/ 27 марта 2012

Если я правильно понимаю вашу проблему, то сделаю одну небольшую корректировку: добавьте двойные кавычки вокруг переменной замены в операторе xargs:

                                 xargs -I% svn rm "%"

В противном случае заданный путь, который содержит пробел, скажет rm удалить два файла или больше, ни один из которых не существует. И.Е. строка, подобная c: \ Cygwin \ My Stuff, переданная как ввод в rm, становится

rm c: \ Cygwin \ My; RM Stuff

0 голосов
/ 08 декабря 2009

Используйте sed, чтобы изменить \ на /. (Прямые косые черты работают с Windows API и почти со всеми программами Windows, они должны быть специально отклонены, чтобы не работать.) Вы хотите продолжать использовать ту же версию SVN (как вы могли бы использовать в другом месте, скажем, с графическим интерфейсом), чтобы вы не беспокойтесь о повреждении ваших данных.

Или измените все на использование версии svn для cygwin.

Основная проблема заключается в том, что xargs повторно интерпретирует данные, будь то потому, что он работает на cygwin или он должен передавать все через оболочку (которая затем делает это), я не уверен (и не могу проверить до завтра).

0 голосов
/ 08 декабря 2009

Укажите cygwin svn (при необходимости установите его) как /usr/bin/svn, чтобы вы получали / в выводе из svn status. Но будь осторожен! Вы не хотите смешивать различные версии SVN, такие как 1.4, 1.5, 1.6, или вам будет еще веселее.

...