В основном,
echo -e "? a b c'd'\n? b a" | sed -e "s/'/'\\\\''/g" -e "s/^. /svn add '/" -e 's/$/'\''/'
должно работать.
Эта команда echo
предназначена для имитации «наихудшего выхода» svn status
. Таким образом, вы должны заменить полную команду echo
на svn status | grep '^?'
. IOW, вы получаете
svn status | grep '^?' | sed -e "s/'/'\\\\''/g" -e "s/^. /svn add '/" -e 's/$/'\''/' | bash
Объяснение: Если вы поместите все имена файлов в '
... '
, вам нужно только следить за '
s в именах файлов. Вы заменяете их на '\''
, заканчивая строку, вставляя необработанный '
и перезапуская новую строку.
Чтобы сделать это, вы заменяете каждый '
на '\''
, а затем вы вводите имя файла в '...'
.
Таким образом, имя файла a b c'd'
попадает в компоненты 'a b c'
, \'
, 'd'
и \'
, поэтому оно равно 'a b c'\''d'\'
. Код выше добавляет пустой ''
, но это не повредит.