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