Практическое задание

Эта задача — шаг 16 курса «find и xargs: поиск и массовые операции»

xargs: удали файлы по списку с пробелами

средне~5 мин

После чистки медиатеки в /root/obsolete.list собран список файлов на удаление — по одному полному пути в строке, и в именах есть пробелы. Удали все перечисленные файлы одной командой через xargs. Всё, чего нет в списке, должно остаться — включая файл с именем /srv/media/draft.

Что потренируешь:
  • xargs
  • xargs -d
  • rm
  • пробелы в именах
  • перенаправление ввода

Разбор темы

xargs превращает строки стандартного входа в аргументы команды — так список из файла становится вызовом rm путь1 путь2 …. Ловушка в разбиении: по умолчанию xargs делит вход по любым пробельным символам (и ещё по-своему трактует кавычки), поэтому путь с пробелом распадается на части. Части могут оказаться реальными файлами — и тогда удаляется совсем не то, что в списке. Надёжный вариант — явно задать разделитель: только перевод строки (-d) или нулевой байт (-0), который не встречается в именах файлов вовсе.

Что проверяется

  1. файлы из списка удалены
  2. остальные файлы на месте

Как это выглядит