Я несколько не уверен, что вы хотите достичь своими примерами. Я не понимаю, что должен сделать первый канал в первом примере, так как вывод, который поступает во второй tar, не используется. A &&
, казалось бы, лучший способ присоединиться к обеим командам (выполнить второй, только если первый был успешным). Кроме того, если вы используете полный список файлов для извлечения (и только для этой задачи), как в ваших примерах, нет необходимости проводить отдельный tar-запуск при его создании, поскольку tar по умолчанию будет извлекать все файлы, если не указано иное.
Что касается скорости, то смола на приемном конце трубы не имеет специальных средств, чтобы отличить, получает ли вход, который он получает, от другого деготь для оптимизации. Однако имеет значение то, что в случае двух tar-команд первый начнет свой вывод сразу, и, таким образом, второй tar может начать работать, в то время как xargs сначала соберут все данные, а затем запустит его вывод и канал после чего смонтирован.
Если вы ищете быстрый способ извлечь только подмножество файлов из архива tar и хотите выбрать по имени файла, я бы рекомендовал использовать star, в котором есть встроенная команда find.
Похоже, что при использовании переключателя '-T'' tar' считывает список и извлекает файлы за один проход под собственным правилом (так как он не извлекается в порядке, как в списке файлов '/ tmp/x', но чтобы они сжимались), тогда как при использовании 'xargs' штраф берется из последовательного выполнения. Даже если это окажется правдой, это слишком медленно IMHO – theta