Я пытаюсь сделать что-то вроде
ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}
чтобы заархивировать 3 последних измененных файла, но в итоге выполняется команда tar отдельно для каждого из файлов, и в конце я остаюсь с одним файлом tar, содержащим последний из 3 файлов (в любом порядке). Я знаю, что неправильно использую xargs, но поиск не помог; Я нахожу примеры, которые тоже не работают. Даже более простая команда
ls | xargs -I {} tar -cf t.tar {}
заканчивается файлом tar, который содержит только один из файлов в этом каталоге.
-I
флаг, вам следует использовать что-то другое, чем{}
для строки замены. Напримерls -t | head -n 3 | xargs -I foo tar -cf t.tar foo
-I
подразумевается,-L 1
что фактически означает выполнение следующей команды для каждой 1 строки ввода, поэтому вы видите результаты, которые вы есть.Согласно этому сообщению , то лучше использовать
r
вместоc
, в случаеxargs
крошит входы, что дает архивный файл , содержащий только последний кусок. Так что лучшим решением будет:источник