Использование команды sed в svn игнорирует обратную косую черту в каталоге - PullRequest
0 голосов
/ 17 мая 2019

Я хочу проверить состояние файлов в моей рабочей копии SVN, а затем удалить их с помощью svn, если они были удалены вручную (чтобы их можно было зафиксировать). я узнал, что

svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g"

правильно находит файлы, которые я удалил вручную, в моем случае это jobs \ run_tests_on_master. Но когда я пытаюсь удалить каталог, используя:

svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g" | xargs svn rm

Я получаю ошибку:

svn: E155007: 'C:\ToolsJenkinsjobsrun_tests_on_master' is not a working copy

Похоже, в каталоге нет обратной косой черты. Есть ли способ обойти это?

Ответы [ 3 ]

0 голосов
/ 18 мая 2019

Вы можете сделать две вещи, чтобы улучшить свою команду: заменить комбинацию grep + sed одним вызовом sed (благодаря -n и p flags) и использовать одинарные кавычки в sed. Используя echo вместо svn, это будет примерно так:

>>> echo '!C  C:\\Tools\\Jenkins\\' | sed -nr 's/!C *//gp'

C:\\Tools\\Jenkins\\

Я понял, что проблема в части команды xargs. Вам необходимо использовать опцию -0:

>>> echo '!C  C:\\Tools\\Jenkins\\' | sed -nr 's/!C *//gp' | xargs -0 echo

C:\\Tools\\Jenkins\\

Это обсуждалось в Выход из обратной косой черты в путях Windows, передаваемых в программы Unix

0 голосов
/ 21 мая 2019

Я сделал обход проблемы, основываясь на предложенных решениях:

  1. Хранить удаленные файлы в текстовом файле
svn status "C:\\Tools\\Jenkins\\" | grep "^\!" | sed "s/^\! *//g" >>file.txt
  1. Удалить файлы, указанные в file.txt, с помощью команды svn remove
for /F "usebackq tokens=*" %%A in (file.txt) do (svn remove "%%A")
0 голосов
/ 18 мая 2019

Следующая awk будет проверять каждую строку вывода svn, чтобы выяснить, может ли она удалить восклицательный знак, за которым следуют пробелы в начале этой строки.Если это так, он выполнит svn rm в результирующей строке.

svn status 'C:\Tools\Jenkins' |awk 'sub(/^! */, ""){system("svn rm " $0)}'
...