Обычно для удаления файлов с пробелами в имени файла вам нужно выполнить:
$ rm "file name"
но если я хочу удалить несколько файлов, например:
$ find . -name "*.txt" | xargs rm
Это не удалит файлы с пробелами в них.
command-line
find
rm
xargs
Ashley
источник
источник
find -name "*\ *.txt" | xargs rm
работает ли для двух файлов слов?Ответы:
Вы можете сказать
find
иxargs
использовать нулевые терминаторыили (проще) использовать встроенное
-delete
действиеfind
или (спасибо @kos)
любой из которых должен соблюдать
ARG_MAX
ограничения системы без необходимостиxargs
.источник
ARG_MAX
я также упомяну, чтоfind . -name "*.txt" -exec rm {} \;
это будет "безопасный выстрел"-print0
не должно быть последний вариант (или , по крайней мере , после того, как-name "*.txt"
) в противном случае это будет хит файлов больше не ограничивается*.txt
...Кстати, если вы использовали что-то отличное от find, вы можете использовать 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
Исходный ответ на ТА .
источник
-0
вместо-d
(дляxargs
) для систем BSD. Что использует Ubuntu? Принятый ответ здесь использует-0
. Что правильно?