Выбор ответа Middle grep, sed, awk, find, xargs спрашивают часто обновлено
xargs и пробелы в именах
Вопрос
Команда find . -name '*.tmp' | xargs rm упала на файле old report.tmp. Почему и как правильно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: xargs делит по пробелам; нужно -print0 xargs -0 rm. xargs без -0 разбивает ввод по пробельным символам (и ещё обрабатывает кавычки), поэтому old report.tmp превращается в old и report.tmp. -print0 разделяет имена нулевым байтом, которого не бывает в путях, а xargs -0 разбирает именно так.
Варианты ответа
rmне умеет удалять файлы с пробелами, нуженunlink- xargs делит по пробелам; нужно
-print0 | xargs -0 rmправильный ответ - Нужно взять команду в кавычки:
xargs "rm" - Нужно добавить
xargs -n1, чтобы передавать по одному
Разбор
xargs без -0 разбивает ввод по пробельным символам (и ещё обрабатывает кавычки), поэтому old report.tmp превращается в old и report.tmp. -print0 разделяет имена нулевым байтом, которого не бывает в путях, а xargs -0 разбирает именно так. Ещё проще: find . -name '*.tmp' -delete. -n1 не помогает: разбиение по пробелам остаётся.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.