如何通过STDIN提取一长串tar包?

时间:2013-09-14 20:09:06

标签: bash tar

我正在将一堆用户主目录的.tar备份复制到新服务器,并且已经将tarball从旧服务器复制到新服务器。

例如;

[root@example.com /home]# ls /home |grep tar
returns:
user1.tar
user2.tar
user3.tar
[etc]

但是让事情变得有点棘手,tarball是从原始服务器上的根目录创建的,所以默认提取在默认路径中有'home',例如。

[root@example.com /home]# tar -xvf user1.tar 

提取到相对于运行命令的位置的新主目录,并将提取的文件放在路径

/home/home/user1

最接近我相信我已经达到了要求(有几个不同的变化);

[root@example.com /]# ls /home |grep tar |tar -xvf -

返回;

tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

现在我意识到每个不同的部分都有很多变通方法,但是如果我要像朋友那样长大成为一个超酷的系统管理员,我应该知道这样的超酷技巧。< / p>

谢谢!

1 个答案:

答案 0 :(得分:1)

tar期望stdin上的tar文件,而不是文件名列表。

分别处理每个文件:

ls *.tar | xargs -n 1 tar xvf

for file in *.tar; do tar xvf $file; done