Обычно для удаления файлов с пробелами в их имени файла необходимо было бы работать:
$ rm "file name"
но если я хочу удалить несколько файлов, например:
$ find . -name "*.txt" | xargs rm
Это не удалит файлы с пробелами в них.
Можно сказать find
и xargs
к обоим разделителям пустого указателя использования
find . -name "*.txt" -print0 | xargs -0 rm
или (более простое) использование встроенное -delete
действие find
find . -name "*.txt" -delete
, или (благодарит @kos)
find . -name "*.txt" -exec rm {} +
, любой из которых должен уважать систему ARG_MAX
предел без потребности в xargs
.
Кстати, при использовании чего-то другого, чем находят, можно использовать TR для замены новых строк пустыми байтами.
, Например, следующий один лайнер удаляет 10 последних измененных файлов в каталоге, даже если у них есть пробелы на их имена.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
Команда xargs использует вкладки, пробелы и новые строки как разделители по умолчанию. Можно сказать этому только использовать символы новой строки ('\n') с-d опцией:
find . -name "*.txt" | xargs -d '\n' rm