-print0
рассказывает найти
для вывода результатов, разделенных нулевыми байтами вместо обычных символов новой строки. Это необходимо, если имена файлов содержат (или могут в будущем) сами символы новой строки.
Затем вам нужно сказать xargs
ожидать, что данные с нулевым разделителем поступают по трубе - вот что -0
это для. Так что здесь необходимо при использовании -print0
на ЛХС.
Тем временем {}
является строкой замены - когда вы используете -Я {}
, каждый {}
в следующей команде будет заменен элементом ввода. Это действительно необходимо только тогда, когда вам нужен контроль над тем, где элемент появляется в следующей командной строке (и имеет побочный эффект запуска одного вызова для каждого элемента, что эквивалентно добавлению -Л 1
). ИМХО, здесь это не нужно, и делает решение неэффективным, поскольку оно работает г.м.
один раз для каждого найденного файла, а не пакетами.
Обратите внимание, что найти
имеет -exec
вариант и -удалять
вариант, который позволяет полностью избежать проблемы записи/чтения данных с разделителями:
найти . -type f -not -name '*gz' -exec rm -v {} +
или же
найти . -type f -not -name '*gz' -print -delete
( -Распечатать
здесь, чтобы дать аналогичную функциональность, как -v
возможность г.м.
).