В качестве примечания:
Всегда, всегда избегайте xargs (1). Это сломанный инструмент, и он полезен только удаленно, если вы используете его с опцией -0. Даже тогда почти всегда лучше использовать опцию find (1) -exec или простой цикл for или while.
Почему xargs такой плохой? Во-первых, он разбивает входные данные на пробелы, то есть все ваши имена файлов, которые содержат пробелы, вызовут хаос. Во-вторых, пытается быть умным, а анализирует кавычки для вас. Это приводит только к большему количеству головной боли, поскольку вы используете его для имен файлов, которые содержат кавычки как часть имени файла, такие как песни: " Я не хочу пропустить вещь .mp3 ". Это только заставит xargs вырваться и проклинать вас за то, что вы плохо процитировали его ввод. Нет, вы этого не сделали: нужно просто узнать, что кавычки не принадлежат входным данным, они принадлежат сценариям оболочки , и xargs не имеет никакого дела, пытаясь их проанализировать.
Имейте в виду, xargs (1) не разбивает пробелы и не разбирает кавычки, когда вы передаете ему -0. Это делает правильную вещь , которая использует NULL-байты для разделения имен файлов. Но это означает, что вам нужно дать ему входные данные, которые используют имена файлов, разделенные байтами, равными NULL (например, " find -foo -print0 "). Что возвращает нас к следующему: лучше всего использовать find -exec: " find -foo -exec bar {} + ".