通过“xargs”将变量从“ls”传递到“tar”

通过“xargs”将变量从“ls”传递到“tar”

我正在尝试做类似的事情

ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}

归档最后修改的 3 个文件,但最终会为每个文件单独运行 tar 命令,最后我留下一个 tar 文件,其中包含 3 个文件中的最后一个(无论顺序如何)。我知道我没有正确使用“xargs”,但搜索没有帮助;我发现一些例子也不起作用。即使是更简单的命令

ls | xargs -I {} tar -cf t.tar {}

最终得到一个仅包含该目录中的一个文件的 tar 文件。

答案1

ls -t | head -n 3 | xargs tar -cf t.tar

对我有用。您需要设置标志有什么原因吗-I

答案2

根据这个帖子,最好使用r而不是c,以防xargs切碎输入,生成仅包含最后一个块的 tar 文件。所以更好的解决方案是:

rm -f t.tar 2>/dev/null  # remove tar if there
ls -t | head -n 3 | xargs tar -rf t.tar

相关内容