【问题标题】:extract file using bash in one tar file but composed of many tar files inside在一个 tar 文件中使用 bash 提取文件,但其中包含许多 tar 文件
【发布时间】:2014-05-15 03:12:31
【问题描述】:

我在下面创建了一个脚本,当我执行它时,我遇到了一个问题。而不是提取它 5 次,它只会提取一次。那么如何解决这个问题呢?

i=0

   for tarfile in *.tar.gz;
                        do
                        ((i++))
                         [ $i = 5 ] && break ;
                tar -xzvf $tarfile
                done
                rm -rvf $tarfile

非常感谢您的帮助。我想提取 tar.gz 文件,其中只有 tar.gz 文件。注意:它被解压了 5 次,我想解压最后一个 tar.gz 文件。请帮帮我。

【问题讨论】:

  • 您有 5 层压缩或五个不同的 tarball?
  • 我有 5 层压缩。例如:file.tar.gz 里面也是 tar.gz 等等..

标签: linux bash loops tar


【解决方案1】:

当且仅当每个嵌套 tar 的文件名不冲突,您可以执行以下操作。

for i in `seq 1 4`; do name=$(ls *.tar.gz); tar xvfz $name; rm $name; done;

如果它们全部相同,例如 foo.tar.gzfoo.tar.gzfoo.tar.gz,您可以简单地从上面删除 rm $name

如果只有一些冲突,您将不得不玩一些更聪明的技巧,例如将中间文件移动到另一个目录。

更新:如果您只想将最终的 tar 移动到新目录,只需在上述循环后使用 mv

mv *.tar.gz OtherDirectoryName

【讨论】:

  • 你给的脚本有问题。它将提取所有 tar.gz。我的意思是提取前 4 个,最后一个保持不变
  • @user3626800,然后将5更改为4
  • 谢谢,另一个问题.. 如何将最后一个tar.gz 文件移动到其他目录?你能把它添加到你给定的脚本中吗?
  • @user3626800,请参阅更新。如果你要经常编写 shell 脚本,你应该得到一个good tutorial 的基础知识。
  • ,在将 *.tar.gz 移动到其他目录后,我想将其专门提取到该目录,并且还有另一个不应提取的 tar.gz 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多