Итак, я удаляю некоторые файлы, используя find с регулярными выражениями, а затем перехожу к xargs -0 rm или просто добавляю --delete
Иногда мне нужно исключить некоторые из них из удаления - я пишу найти вывод в файл, удалить несколько строк и заменить символы новой строки нулевыми символами. Я делаю это в vim, и теперь у меня есть этот символ EOF, который вызывает у меня раздражение, когда я скармливаю его команде удаления. Вот очень упрощенный тестовый пример с использованием файла вместо rm:
[testdir]$ touch t{1..3}
[testdir]$ find . -name 't*' -print0 > xa
[testdir]$ find . -name 't*' > xb
[testdir]$ cat -v xa
./t3^@./t2^@./t1^@[testdir]$ cat xb
./t3
./t2
./t1
[testdir]$ vim xb
В vim я делаю ':% s / \ n / CTRL - @ /' и сохраняю. Впоследствии нежелательный эффект по сравнению с исходным выходным файлом find:
[testdir]$ cat -v xb
./t3^@./t2^@./t1^@
[testdir]$ xargs -a xa -0 file
./t3: empty
./t2: empty
./t1: empty
[testdir]$ xargs -a xb -0 -E '\012' file
xargs: warning: the -E option has no effect if -0 or -d is used.
./t3: empty
./t2: empty
./t1: empty
: cannot open `\012' (No such file or directory)
rm отлично работает со всеми файлами, просто в конце я получаю сообщение об ошибке. Обратите внимание, как исходный вывод не вставляет новую строку в конце, см. Результат от 'cat xa'. Кроме того, xargs сообщает мне, что я не могу исключить этот символ EOF из-за нулевого разделителя.
Я хотел бы знать, как это исправить, есть идеи?