脚本 – 提取多个文件

我有这样的30个tgz文件:

live-3.0.10-20101031.tgz live-3.0.4-20101005.tgz 

当我提取他们将被提取到“活”文件夹(即:tar xvzf活-3.0.10-20101031.tgz将解压到“活”文件夹我想有一个小脚本,将提取所有文件最老到最新的“活”文件夹,我希望新的文件被复制到旧文件这是我做的,但我不是,如果它是好的…你可以让我知道你的想法?

 #!/bin/bash for f in live*.tgz; do echo $f tar xzvf $f & done 

试试这个,你错过了; 分开两个命令。 也可能不需要& ,你可以用它来并行化tar调用,但是如果你有多个文件(它们将争夺I / O和CPU),它可能会造成更多的伤害。

为了正确sorting文件列表,你可以使用sort -V ,考虑到版本号(在bash上的*通配符或普通sort会在版本4之前列出版本10,如1 <4)。 这应该工作:

 for f in `ls live*.tgz | sort -V`; do echo $f; tar xzvf $f; done 

未testing,表格记忆:

 ls -1rt live*tgz | xargs tar xvf 

说明:

  • ls -1 – >在一个列表中列出文件
  • ls -t – >根据修改时间列出文件(最佳创build时间)
  • ls -r – >按相反顺序排列(旧的第一个)

然后这个列表通过pipe道传送到xargs,所以tar把每个文件一个接一个,并且按照你的意愿解开它们,从旧到新。

HTH