Piping find -name для xargs приводит к именам файлов с пробелами, которые не передаются команде

Обычно для удаления файлов с пробелами в их имени вам нужно будет запускать:

$ rm "file name"

, но если я хочу удалить несколько файлов, например:

$ find . -name "*.txt" | xargs rm

не удаляет файлы с пробелами в них.

1
задан 12 September 2017 в 13:01

2 ответа

Кстати, если вы использовали что-то другое, кроме find, вы можете использовать tr для замены строк новой строки пустым байтом.

Например. следующий один лайнер удаляет 10 последних измененных файлов в каталоге, даже если они имеют пробелы в своих именах.

ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm

0
ответ дан 23 May 2018 в 17:56

Команда xargs использует вкладки, пробелы и новые строки как разделители по умолчанию. Вы можете сказать только, чтобы использовать символы новой строки ('\ n') с опцией -d:

find . -name "*.txt" | xargs -d '\n' rm

Ответ на источник SO.

0
ответ дан 23 May 2018 в 17:56

Другие вопросы по тегам:

Похожие вопросы: