gawk: как вывести результаты с разделителем символов NUL

Я использую Subversion для управления исходным кодом и хочу использовать сценарий для очистки неверсионных файлов из рабочей области. Хотя было бы больше к моему grep чем просто "^?" в этом примере это служит достаточным примером того, что я хотел бы сделать... что-то вроде:

svn status | grep "^?" | grep -v "\.exe\b*" | gawk "{print $2}" | xargs -0 rm

или же

svn status | grep "^?" | grep -v "\.exe\b*" | gawk "{print $2}" | xargs -n 1 rm

Моя проблема в том, что rm программа видит имена файлов без символов разделителя каталогов (я думаю, что они интерпретируются как escape-символы). Т.е. вместо "Tests\results\filename.txt", rm программа получает "Testsresultsfilename.txt", что, конечно, не является реальным именем файла.

grep "^?" выбирает только те строки, которые представляют неверсионные файлы в рабочей области, grep -v "\.exe\b*" исключает любые результаты, которые являются исполняемыми файлами продукта сборки, и gawk "{print $2}" дает мне только часть имени файла svn status вывод, опуская ведущий?"Это означает, что это неверсионный файл. -0 парам к xargs говорит ему ожидать ввода stdin с символьными терминаторами NUL вместо пробела, что полезно, например, при выводе из find с этими -print0 пары. Я надеюсь, что-то подобное с моим gawk выходной, но поиск gawk документация не обнаруживает ничего очевидного. Конечный результат приведенных выше примеров заключается в том, что либо я пытаюсь удалить одно гипотетическое имя файла, которое является конкатенацией каждого неверсионного файла (в нем говорится, что имя файла слишком длинное, но на самом деле это все имена файлов, которые я хочу удалить, сгруппированные вместе) или во втором примере я пытаюсь удалить каждый неверсионный файл по отдельности (эта часть хороша), но имена путей сжаты вместе, так как обратная косая черта пути считается escape-символом.

Как я могу сделать эту работу?

0 ответов

Другие вопросы по тегам