脚本-提取多个文件

脚本-提取多个文件

我有 30 个如下的 TGZ 文件:

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

当我提取它们时,它们将被提取到“live”文件夹中。(即:tar xvzf live-3.0.10-20101031.tgz 将提取到“live”文件夹。我想要一个小脚本,将所有文件从最旧到最新提取到“live”文件夹中。我希望将新文件复制到旧文件上,这就是我所做的,但我不知道它是否好...你能让我知道你的想法吗?

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

答案1

试试这个,你没有用 ; 来分隔两个命令。另外,&可能不需要,你可以用它来并行化tar调用,但如果你有两个以上的文件(它们会争夺 I/O 和 CPU),那么这样做可能弊大于利。

为了正确排序文件列表,您可以使用sort -V,排序时会考虑版本号(*bash 或 plain 上的通配符sort会将版本 10 列在版本 4 之前,即 1<4)。这应该可行:

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

答案2

未测试,形成记忆:

ls -1rt live*tgz | xargs tar xvf

解释:

  • ls -1--> 在一列中列出文件
  • ls -t--> 根据修改时间列出文件(创建时间的最佳方法)
  • ls -r--> 按相反顺序列出(旧的排在前面)

然后通过 xargs 将列表传送到 tar,这样 tar 就会逐个获取每个文件并按照您需要的顺序从旧到新进行解压。

高血压

相关内容