我有 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 就会逐个获取每个文件并按照您需要的顺序从旧到新进行解压。
高血压