SVN: установить все файлы, отмеченные знаком "!" на "D"? - PullRequest
2 голосов
/ 20 августа 2009

Короче говоря, была допущена ошибка, и теперь у меня есть не менее ста файлов в десятках папок, которые необходимо удалить из моего хранилища.

Сейчас они все помечены как "!" в svn status , и я хотел бы удалить их без ввода вручную svn remove blahblah .

Есть ли быстрый способ сделать это?

1 Ответ

5 голосов
/ 20 августа 2009

Это довольно легко сделать с помощью небольшого shell-scripting-foo.

svn status | grep "^\!" | awk '{print $2}' | xargs svn del

Вот разбивка по запросу:

  • Выход svn status передается по каналу grep
  • grep передает каждую строку, начинающуюся с ! (^ в регулярном выражении означает начало строки, а '\' необходимо для экранирования специального значения !)
  • awk затем принимает второй «аргумент» (так сказать ... это путь к файлу) из grep и направляет только его в ...
  • xargs, которая является просто утилитой для построения исполняемых команд оболочки из стандартного ввода, которая генерирует и запускает команду svn del your/file/here

Вы также можете использовать варианты в этой строке, чтобы делать все виды удобных вещей с svn, например, рекурсивное добавление файлов в репозиторий:

svn status | grep "^\?" | awk '{print $2}' | xargs svn add

Кроме того, я только что вспомнил и хотел указать, что это не будет работать, если у вас есть пробелы в вашем пути или именах файлов. Я всегда об этом забываю, потому что никогда не забываю. Если в ваших путях / именах файлов есть пробелы, используйте следующий вариант в первом примере:

svn status | grep "^\!" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn del

(Вероятно, есть более изящный способ сделать это, так что не стесняйтесь вмешиваться). В этом случае первый sed берет первый символ пробела и любые (если имеются) пробелы, следующие за ним, и удаляет их (в основном, обрезку). Затем второй вызов sed заменяет все оставшиеся пробелы на \, который является экранированным пробелом для оболочки. Если подумать, вы могли бы просто заключить его в кавычки ...

...