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-символом.
Как я могу сделать эту работу?