Предположим, что я хочу удалить все файлы в папке, размер которых превышает 1 МБ.
$ find . -size +1M | xargs -0 rm
Это не приведет к удалению файлов с пробелами в их именах. Поэтому я хочу привести все аргументы, которые он посылает rm
. Если find
дает, то Some report.docx
должен перейти "Some report.docx"
к rm
.
Как я могу это сделать?
xargs
. Кроме того, как следует из вики, не следует использоватьxargs
без прохождения-print0
кfind
.xargs -d$'\n'
для ограничения разделителя только новыми строками (а не пробелами; это не будет обрабатывать кавычки и т. Д., Особенно - я проверял систему GNU) - ответ дан в stackoverflow.com/a/33528111/94687Ответы:
Простое использование:
Если вы настаиваете на использовании
xargs
иrm
сfind
, просто добавьте-print0
в свою команду:Другой путь:
От
man find
:источник
"Some report.docx"
кrm
, если имя файла не содержит кавычки. То, что вы хотите, это передатьSome report.docx
беспрепятственныйrm
. Ответ KasiyA (сейчас) показывает общий способ сделать это сfind
. [KasiyA: извините за неправильный пинг ранее.]$0
и$1
т. Д.xargs -0
вместоxargs -r0
.Вариант
-0
изxargs
средств , которые выводят из трубы интерпретируются как нуль элементов. В таком случае вам также необходимо создать вход для канала сfind ... -print0
.источник
У меня было похожее требование, и в итоге я использовал
-I
переключатель, чтобы получить заполнитель, и я смог его процитировать.источник