2009-12-07 2 views
1

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

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

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

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

+0

Hm. Я получаю '/' 's из 'svn status' под cygwin. – retracile

+0

которые СВН вы используете: "который СВН" Шахта: "/ cygdrive/с/Program Files (x86)/CollabNet/Subversion Client/СВН" – Dougnukem

+0

Шахта '/ USR/бен/svn', так что один из cygwin. – retracile

ответ

3

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

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

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

0

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

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

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

0

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

        xargs -I% svn rm "%" 

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

rm c: \ Cygwin \ My; rm Предмет

Смежные вопросы